Странная проблема с Subversion - «Файл уже существует» при попытке воссоздать каталог, который ИСПОЛЬЗУЕТСЯ в моем хранилище - PullRequest
70 голосов
/ 11 сентября 2009

Итак - у меня был каталог mysql несколько ревизий назад. Я удалил его и решил начать все сначала - но когда я пытаюсь создать новый каталог mysql - я продолжаю сталкиваться с ошибкой «Файл уже существует»:

support:/etc/puppet/modules# mkdir mysql
support:/etc/puppet/modules# svn add mysql/
A         mysql
support:/etc/puppet/modules# svn commit -m " Test"
Adding         modules/mysql
svn: Commit failed (details follow):
svn: File already exists: filesystem '/var/lib/svn/puppet/db', transaction '11-r', path '/trunk/modules/mysql'
support:/etc/puppet/modules# svn delete mysql
svn: Use --force to override this restriction
svn: 'mysql' has local modifications
support:/etc/puppet/modules# svn --force delete mysql
D         mysql

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

support:/etc/puppet/modules# svn status
support:/etc/puppet/modules# svn update
At revision 11.
support:/etc/puppet/modules# svn mkdir mysql
A         mysql
support:/etc/puppet/modules# svn commit -m "Test"
Adding         modules/mysql
svn: Commit failed (details follow):
svn: File already exists: filesystem '/var/lib/svn/puppet/db', transaction '11-s', path '/trunk/modules/mysql'

Ответы [ 14 ]

0 голосов
/ 11 августа 2014

Вам нужна команда svn 'export'. При этом вы можете поместить файл или все дерево каталогов в состояние другой ревизии в другую ветку.

Так что-то вроде

rm file #without 'svn' in front!
svn export myrepo/path/to/file@<revision> .
svn commit
0 голосов
/ 11 ноября 2013

Согласно решению Atmocreation, за исключением того, что вам не нужно повторно оформлять весь проект, что полезно, если у вас уже есть работа.

Допустим, у вас есть рабочая копия:

/foo/

, который содержит каталоги:

/foo/bar/baz

и вы получаете сообщение об ошибке при коммите:

svn: File already exists: filesystem '/foo/bar'

Резервное копирование содержимого бара где-нибудь:

mkdir -p ~/tmp/code_backup
cp -r /foo/bar ~/tmp/code_backup

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

find ~/tmp/code_backup/bar -name .svn -type d -exec rm -rf {} \;

Проверьте, что копия идентична:

diff -r -x .svn dist ~/tmp/code_backup/dist

Удалите поврежденную директорию из рабочей копии: CD / Foo rm -rf bar

А затем восстановить его из хранилища:

cd /foo
svn update bar

Скопируйте обратно измененные файлы из резервной копии:

cp -r ~/tmp/code_backup/bar /foo/

Теперь вы должны иметь возможность коммитить без ошибки.

0 голосов
/ 26 октября 2012

Проблема в том, что проверка происходит на ноутбуке, и в этом случае Subversion не может справиться с автономной синхронизацией. Проблема воспроизводится на другом ноутбуке, в то время как на рабочем столе у ​​меня нет проблем с проверкой того же хранилища.

Надеюсь, этот ответ поможет вам, мне потребовалось довольно много времени, чтобы выяснить.

0 голосов
/ 08 декабря 2010

Такая ситуация возникает, если в хранилище есть объект, который создается текущей транзакцией.

Простой сценарий:

  1. извлекает каталог дважды, как DIR1 и DIR2
  2. сделать 'svn mkdir test' в обоих
  3. сделать коммит из DIR1
  4. попытаться сделать коммит DIR2 (без svn up), SVN вернет эту ошибку

То же самое при добавлении одинаковых файлов из двух рабочих копий.

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