Мне как-то удалось привести репозиторий 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
, что и выше.
Что происходит и как мне это исправить?
Обновлено: @Rob Oxspring поймал меня: я стал слишком агрессивно перемещать вещи в Eclipse.
ОБНОВЛЕНИЕ: я принимаю ответ @Rob Oxspring «не делайте этого / просто начинайте заново» и следую его совету. Мне все равно было бы интересно, если бы кто-нибудь мог сказать мне: (а) что именно иметь в виду вышеприведенных сообщений об ошибках и (б) как на самом деле исправить проблема.
Вы начали с простого копирования / перемещения каталога с помощью команд ОС или начали с SVN? Если вы просто скопировали файлы через ОС, у вас все равно остались бы скрытые папки, содержащие информацию SVN, указывающую на старое местоположение.
Самый простой способ исправить многие ошибки SVN - переместить весь каталог через ОС, обновить его, чтобы получить еще одну чистую копию, а затем объединить все, что вы изменили, с помощью другого инструмента, WinMerge или подобного.
После этого вы можете делать все, что пытались сделать, но делать это правильно :).
Мой опыт показывает, что иногда локальная копия не синхронизируется с репозиторием. Обычно я решаю эту проблему, поднимаясь по дереву локальных каталогов, начиная с каталога, в котором возникла проблема, и пытаюсь выполнять очистку и обновление на каждом этапе.
Мне кажется, что type
был создан какой-то командой копирования с поддержкой Subversion, а затем перемещен в текущий каталог с помощью копии, не поддерживающей Subversion. По моему опыту, такого рода вещи обычно возникают, когда операции рефакторинга пакетов связаны в Eclipse без промежуточных коммитов. Обычно Subversion плохо справляется с этим, когда вы копируете / перемещаете локально скопированный / перемещенный файл или папку, хотя я думаю, что версия 1.5 может справиться с этим лучше.
Чтобы избежать этого в будущем, выполняйте фиксацию между такими шагами. Если вы хотите скрыть промежуточные коммиты, я бы порекомендовал выполнить многоэтапный рефакторинг в ветке, а затем объединить изменения обратно в основную линию в той единственной фиксации, которую вы сделали.
Если это не слишком много работы, я бы рекомендовал вернуться к чистой рабочей копии и повторить свои изменения, фиксируя после каждого шага. Если вы счастливы потерять историю, т.е. позволить новому IntegerType.java
вообще не связываться со старым IntegerType.java
, то вы можете воспользоваться подходом, предложенным BCS:
.svn
.Я бы посоветовал удалить (вне subversion, например, с помощью rm или аналогичного) каталог выше test, а затем запустить там svn update.
То есть, если вы не хотите получать полностью новую рабочую копию, как предлагали другие, это может быть самым безопасным подходом.
Произошло то, что вы выполнили проверку папки, а затем локально svn добавили и / или изменили что-то в / в этой папке, но до того, как вы зафиксировали свои изменения, исходная папка была перемещена (или удалена) из SVN репозиторий.
Все, что вам нужно сделать, это переключить текущую кассу на новое место в репозитории SVN. Итак, предположим, что у вас есть проверка папки foo из пути / в / folder1 / foo, и этот foo был перемещен в путь / в / foo, вам просто нужно запустить:
$ svn switch path/to/foo
Вот и все... ;-)
Звучит разумно. К сожалению, у меня сейчас нет обновленной рабочей копии, чтобы протестировать ее ... ;-)
У меня была такая же проблема. Я исправил это, удалив папку .svn
из затронутой папки.
Спасибо. Этот ответ просто заставил меня понять, что я сделал (хотя я использовал Eclipse для перемещения каталога. Вы могли подумать, что Eclipse сделает это правильно. Какой беспорядок, чтобы убрать, но вы заставили меня двигаться в правильном направлении. жизнь.