Вот мой сценарий:
Предположим, что у нас есть SVN-репо со следующим содержанием: моя папка моя_папка\file.txt
Теперь я создаю две проверки этого репо, co1 и co2.
В co1 мы модифицируем file.txt. В co2 имеем:
- svn удалить мою папку
- svn commit
- Создайте новую папку с именем myfolder
- svn добавить мою папку
- svn commit
Теперь, если я попытаюсь выполнить обновление в co1, я получаю конфликт дерева:
A  +  C myfolder >   local edit, incoming delete upon update
M  +    myfolder\file.txt
Я хочу сохранить мою папку и измененный файл, поэтому я разрешаю конфликт дерева:
svn resolve --accept working folder
Теперь, если я попытаюсь зафиксировать, я получаю "svn: Directory" /myfolder "устаревший". Если я попытаюсь разрешить это, используя svn up myfolder, я снова получу конфликт дерева:
A  +  C folder >   local add, incoming add upon update
M  +    myfolder\file.txt
Хорошо, поэтому мы снова попробуем svn resolve --access рабочую папку. Но мы все еще не можем зафиксировать, мы получаем то же сообщение, что "svn: Directory" /myfolder "устарели", если мы делаем svn вверх по моей папке, мы возвращаемся к последнему конфликту с деревом.
Какова правильная процедура для разрешения конфликта такого типа (когда мы хотим сохранить мою папку и ее изменения)?
EDIT: Windows cmd line script, чтобы проиллюстрировать:
rmdir /S /Q C:\svntest 
mkdir C:\svntest
cd C:\svntest
svnadmin create repo
svn co file:///c:/svntest/repo co1
svn co file:///c:/svntest/repo co2
cd co1
mkdir folder
echo content > folder\file.txt
svn add folder
svn commit folder -m ""
cd C:\svntest\co2
svn up
cd C:\svntest\co1
svn del folder
svn commit -m ""
mkdir folder
svn add folder
svn commit -m ""
cd C:\svntest\co2
echo changed_content > folder\file.txt
svn up
svn resolve --accept working folder
svn commit -m ""
svn up folder
svn resolve --accept working folder
svn commit -m ""
И вот результат запуска script (обратите внимание на сбои фиксации в конце):
C:\>rmdir /S /Q C:\svntest  
C:\>mkdir C:\svntest 
C:\>cd C:\svntest 
C:\svntest>svnadmin create repo 
C:\svntest>svn co file:///c:/svntest/repo co1 
Checked out revision 0.
C:\svntest>svn co file:///c:/svntest/repo co2 
Checked out revision 0.
C:\svntest>cd co1 
C:\svntest\co1>mkdir folder 
C:\svntest\co1>echo content  1>folder\file.txt 
C:\svntest\co1>svn add folder 
A         folder
A         folder\file.txt
C:\svntest\co1>svn commit folder -m "" 
Adding         folder
Adding         folder\file.txt
Transmitting file data .
Committed revision 1.
C:\svntest\co1>cd C:\svntest\co2 
C:\svntest\co2>svn up 
A    folder
A    folder\file.txt
Updated to revision 1.
C:\svntest\co2>cd C:\svntest\co1 
C:\svntest\co1>svn del folder 
D         folder\file.txt
D         folder
C:\svntest\co1>svn commit -m "" 
Deleting       folder
Committed revision 2.
C:\svntest\co1>mkdir folder 
C:\svntest\co1>svn add folder 
A         folder
C:\svntest\co1>svn commit -m "" 
Adding         folder
Committed revision 3.
C:\svntest\co1>cd C:\svntest\co2 
C:\svntest\co2>echo changed_content  1>folder\file.txt 
C:\svntest\co2>svn up 
C folder
At revision 3.
Summary of conflicts:
  Tree conflicts: 1
C:\svntest\co2>svn resolve --accept working folder 
Resolved conflicted state of 'folder'
C:\svntest\co2>svn commit -m "" 
Adding         folder
svn: Commit failed (details follow):
svn: Directory '/folder' is out of date
C:\svntest\co2>svn up folder 
   C folder
At revision 3.
Summary of conflicts:
  Tree conflicts: 1
C:\svntest\co2>svn resolve --accept working folder 
Resolved conflicted state of 'folder'
C:\svntest\co2>svn commit -m "" 
Adding         folder
svn: Commit failed (details follow):
svn: Directory '/folder' is out of date
