Ошибка фиксации SVN: каталог устарел - PullRequest
52 голосов
/ 21 июля 2010

У меня есть проблема, которая кажется очень простой, но ее трудно решить. Я получаю упомянутую ошибку после удаления каталога. Я пока не нашел решения для разрешения конфликта. Вот как это происходит:

svn add dir
svn add dir/file1
svn commit
svn add dir/file2
svn commit
svn delete dir
svn commit
--> commit failed  
--> Directory '/dir' is out of date

Очевидное решение 'svn update' не работает. После обновления SVN следующий коммит завершается неудачно:

Commit failed
Directory '/dir' remains in conflict.

Тем временем я нашел решение, но оно немного громоздко:

svn resolve --accept working dir
svn commit --> still fails
svn update
svn commit --> still fails
svn resolve --accept working dir
svn commit --> NO PROBLEM!

Два вопроса: - может кто-нибудь объяснить это поведение, потому что мне очень любопытно - эта проблема возникает в Perl-скрипте в гораздо более сложной ситуации. Может кто-нибудь дать мне простое решение с «выполнимо» в Perl-скрипте?

Ответы [ 8 ]

77 голосов
/ 21 июля 2010

Просто сделайте svn update и тогда ваш коммит должен сработать.

58 голосов
/ 01 сентября 2011

Если я правильно понимаю Subversion, проблема заключается в следующем:

Subversion отслеживает текущую версию для каждого файла и директорию в отдельности.Всякий раз, когда изменение в файле фиксируется, ревизия родительского каталога изменяется в репозитории, но рабочая копия все еще имеет каталог в своей старой ревизии.

Так что в вашем сценарии после добавления файла родительский каталогв репо есть более высокая ревизия, чем у вашей рабочей копии.Когда вы пытаетесь удалить каталог, вы работаете с устаревшей версией.

Чтобы решить:

Сделайте svn update после добавления файла, но перед удалением каталога.

В общем, если вы не хотите вносить изменения кого-либо еще, вы можете ограничить обновление только самой директорией: svn up --depth empty dir.

3 голосов
/ 03 октября 2015

Обновите, очистите и подтвердите.

1 голос
/ 21 июля 2010

Вы пробовали svn up dir перед выполнением финального коммита?

1 голос
/ 21 июля 2010

Вам просто нужно обновить, а затем зафиксировать

0 голосов
/ 17 мая 2018

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

0 голосов
/ 20 мая 2016

Аналогичная проблема, с которой я столкнулся при обновлении рабочего пространства:

$ svn delete dir/file
D         dir/file
$ svn ci -m "comment1"
Deleting       dir/file
$ svn delete dir/
D         dir
$ svn ci -m "comment2"
Deleting       dir
svn: Commit failed (details follow):
svn: Item 'dir' is out of date

Чтобы решить эту проблему, я обновил исходники и использовал команду «Удалить URL»:

$ svn delete --force https://server/path.../dir
$ svn update
0 голосов
/ 08 января 2014

Чтобы обойти эту проблему, я использовал 'svn revert', затем снова сделал коммит, который должен избавиться от содержимого, затем сделать 'svn delete' и зафиксировать снова. У меня возникла эта проблема при попытке переименовать каталог, но, надеюсь, это сработает.

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