Подтвердить что ты не робот

Каталоги "Phantom" в репозитории SVN

Мне как-то удалось получить репозиторий SVN в плохом состоянии. Я переместил каталог, и теперь я не могу его зафиксировать в новом месте.

Что касается svn status, каталог неизвестен (имя каталога type).

$ svn status
?      type

Когда я пытаюсь добавить каталог, сервер говорит, что он уже существует.

$ svn add type
svn: warning: 'type' is already under version control

Если я попытаюсь обновить каталог, он снова исчезнет.

$ svn update type
svn: '.' is not under version control

Если я попытаюсь зафиксировать это, сервер жалуется, что старый родительский каталог больше не существует.

$ svn commit type -m "Moving type"
svn: Commit failed (details follow):
svn: '/prior/trunk/src/nyu/prior/cvc3/theorem_prover/expression' path not found

Чтобы добавить к тайне, содержимое каталога будет помечено как измененное.

$ svn status type
A  +   type
M  +   type/IntegerType.java
M  +   type/BooleanType.java
M  +   type/Type.java
M  +   type/RationalRangeType.java
M  +   type/RationalType.java
M  +   type/IntegerRangeType.java

Если я попытаюсь обновить из каталога, я получаю это.

$ cd type
$ svn update
svn: Two top-level reports with no target

Выполнение операции внутри каталога дает ту же ошибку path not found, что и выше.

Что происходит и как его исправить?

EDIT: @Rob Oxspring поймал меня: я слишком агрессивно двигался вокруг в Eclipse.

ОБНОВЛЕНИЕ: Я принимаю ответ @Rob Oxspring "не делай этого/просто начинаешь" и беря его совет. Мне все равно было бы интересно, если бы кто-нибудь мог сказать мне: (а) то, что означают вышеприведенные сообщения об ошибках, и (б) как исправить проблему.

4b9b3361

Ответ 1

Мне кажется, что type был создан некоторой командой копирования Subversion, а затем переместился в текущий каталог с использованием копии Subversion-unaware. По моему опыту, такого рода вещи обычно возникают, когда операции рефакторинга пакетов соединены вместе в Eclipse без коммиттов между ними. Как правило, Subversion не справляется с этим, когда вы копируете/перемещаете скопированный/перемещенный файл или папку, хотя я думаю, что версия 1.5 может справиться с ней лучше.

Чтобы избежать этого в будущем, сделайте фиксацию между такими шагами. Если вы хотите скрыть промежуточные коммиты, я бы рекомендовал делать многоэтапный рефакторинг на ветке, а затем объединять изменения обратно в основную линию в том единственном, что вы были после.

Если это не так много, я бы рекомендовал вернуться к чистой рабочей копии и переделать ваши изменения, совершив после каждого шага. Если вы счастливы потерять историю, то есть позволить новому IntegerType.java не связываться вообще со старым IntegerType.java, тогда вы можете воспользоваться предложенным BCS подходом:

  • Переместите ваши измененные файлы в какое-то временное место, удалив все каталоги .svn
  • Обновите рабочую копию в рабочем состоянии
  • Скопируйте свои изменения обратно туда, где вы хотите.
  • Зафиксировать полученную рабочую копию

Ответ 2

Легкий способ исправить множество ошибок SVN - это переместить весь каталог через ОС, обновить, чтобы получить еще одну чистую копию, а затем объединить все, что вы изменили, с помощью какого-либо другого инструмента, WinMerge или тому подобного.

После этого вы можете делать все, что вы пытаетесь сделать, но делайте это правильно:).

Ответ 3

Вы начали, просто скопировав/переместив каталог с командами ОС, или вы начали с файлов SVN? Если вы просто скопировали файлы через ОС, у вас все равно были бы скрытые папки, содержащие информацию SVN, указывающую на старое местоположение.

Ответ 4

Я бы предложил, чтобы удалить (вне subversionso с rm или аналогичным), в приведенной выше директории, а затем запустить там svn update.

То есть, если вы не хотите получать совершенно новую рабочую копию, как предложили другие, что может быть самым безопасным подходом.

Ответ 5

У меня была такая же проблема. Я исправил его, удалив папку .svn из зараженной папки.

Ответ 6

Мой опыт в том, что иногда локальная копия не синхронизируется с репозиторием. Обычно я решаю это, переходя в локальное дерево каталогов, начиная с каталога с проблемой и пытаюсь сделать очистку и обновление с каждым шагом.

Ответ 7

Что случилось, так это то, что вы сделали проверку папки, затем локально 'svn добавили и/или внесли изменения в/в эту папку, но прежде чем вы внесете изменения, исходная папка была перемещена (или удалена) из хранилища SVN.

Все, что вам нужно сделать, - это переключить текущую проверку на новое место в репозитории SVN. Итак, предположим, что у вас есть чек из папки foo из path/to/folder1/foo, и что foo был перемещен в path/to/foo, вам просто нужно запустить:

$ svn switch path/to/foo

Что это...; -)