Ошибка SVN: версионный каталог с таким именем уже существует - PullRequest
9 голосов
/ 21 июня 2010

Я пытаюсь переключить локальную папку с филиала на магистраль. Я получаю следующую ошибку.

Failed to add directory 'Drive:\Path\To\The\Directory'
a versioned directory of the same name already exists

Какое разрешение для этого?

Ответы [ 5 ]

10 голосов
/ 21 июня 2010

Вы часто видите это, если у вас есть ситуация, когда вы создали каталог на ветке (даже я думаю, что вы не зарегистрировали его), но тем временем кто-то также создал каталог с тем же именем нахобот.Поэтому, когда вы переключаетесь с ветви на транк, он пытается проверить версию каталога транка, но не может, потому что он уже существует, и поэтому он не хочет удалять вашу версию.

РЕДАКТИРОВАТЬ:

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

EDIT2:

Нет хорошего способа, чтобы SVN разрешал это автоматически.Похоже, вы создали эту папку в своей рабочей копии (которая в настоящее время проверена на ветке), в то время как кто-то еще создал папку с этим именем в стволе.Когда вы переключаетесь, он пытается создать новый каталог, но не может, потому что он у вас уже есть.Я утверждаю, что способ only состоит в том, чтобы временно переименовать каталог, затем переключить и затем сравнить содержимое обоих каталогов, чтобы увидеть, есть ли дополнительные файлы, которые необходимо добавить или объединить.

3 голосов
/ 21 июня 2010

Я подозреваю, что \ Path \ To \ Directory \ Directory не существует в ветви, но существует в транке.Может быть, добавлен в багажник?Когда вы переключаетесь, SVN думает, что он должен добавить его в локальный каталог, поскольку он не (должен быть) в ветви, из которой вы переключаетесь.Но это все равно есть.Это может быть результатом предварительного переключения без надлежащей проверки.то есть вы делали это переключение раньше, а затем, когда вы переключились с сундука обратно на ветку, вы не очистили грязь.так что теперь есть оставшийся каталог, и он не ожидает его увидеть.

2 голосов
/ 30 мая 2012

Простым решением является использование svn switch с флагом --force.

Например, я увидел ошибку после переключения на ветку, когда я переключился обратно на транк. Это решило мои проблемы:

svn switch --force ^/trunk
2 голосов
/ 21 июня 2010

Может быть, Path/To/The/Directory не существует в вашей текущей ветке, но он существует в транке?

Другая проблема, которая может быть проблемой, - это когда на сервере SVN работает ОС с учетом регистра (*nix, например), и вы используете Windows.В этом случае сервер SVN будет рассматривать:

Path/To/The/Directory
Path/To/The/directory

как два разных каталога.Обычно это происходит, когда кто-то изменяет регистр имени каталога.

0 голосов
/ 27 сентября 2013

Чтобы исправить эту ошибку, оставив каталог на месте, я обнаружил, что работает следующий метод:

  • SVN переключает каталог на правильный путь в хранилище (если он там уже не указывает).
  • Переместите скрытую папку .svn внутри каталога в какое-нибудь безопасное место (рабочий стол).
  • Очистка SVN и обновление родительского каталога. Обновление может привести к той же ошибке в некотором подкаталоге.Игнорируйте это.
  • Новая скрытая папка .svn будет создана внутри каталога.Переместите оригинальную скрытую папку .svn обратно в каталог, перезаписав существующее содержимое новой папки .svn. Я не помню, сделал ли я это из-за какой-то ошибки или из-за догадки ... в любом случае, похоже, это помогло.
  • SVN снова обновил каталог.
  • Вуаля!

Обратите внимание, что по крайней мере один раз в одной системе этот трюк приводил к отображению всех подкаталогов / файлов?.Удаление папки .svn из подкаталога и очистка / обновление родительского файла снова сделали свое дело.

Не уверен, что это такое voodoo, но я зафиксировал изменения и обновил различные системы после этого, и все они кажутся счастливыми.

К вашему сведению, я попал в это состояние из-за необычной ситуации:

/ foo был svn: external к / newfoo / bar, и это соглашение нужно было отменить, поэтому / newfoo / bar былперемещен и переименован в /foo.

  • Я удалил свойство svn: external в / указывая на / foo и зафиксировал.
  • Я использовал браузер хранилища TortoiseSVN, чтобы сначала переместить / newfoo / bar в / bar, а затем переименовать / bar в /foo.
  • Обновление SVN для моей локальной копии сначала привело к сообщению об ошибке, что /foo указывал на / newfoo / bar, когда существовал / foo (или такой).
  • Я SVN переключил / foo на новый путь / foo
  • Теперь обновление SVN привело к ошибке «каталог с версией с таким именем уже существует».
...