これが私のシナリオです:
次の内容の SVN リポジトリがあるとします: myfolder myfolder\file.txt
ここで、このレポの 2 つのチェックアウト co1 と co2 を作成します。
co1 では、file.txt を変更します。co2 では:
- svn 削除 myfolder
- SVNコミット
- myfolder という名前の新しいフォルダーを作成します。
- svn myfolder を追加
- SVNコミット
co1 で更新しようとすると、ツリーの競合が発生します。
A + C myfolder > local edit, incoming delete upon update
M + myfolder\file.txt
myfolder と変更されたファイルを保持したいので、ツリーの競合を解決します。
svn resolve --accept working folder
コミットしようとすると、「svn: Directory '/myfolder' is out of date」が表示されます。svn up myfolder を使用してこれを解決しようとすると、ツリーの競合が再び発生します。
A + C folder > local add, incoming add upon update
M + myfolder\file.txt
よし、svn resolve --accept working folder をもう一度試してみる。しかし、まだコミットできません。「svn: Directory '/myfolder' is out of date」という同じメッセージが表示されます。svn up myfolder を実行すると、最後のツリー競合に戻ります。
このタイプの競合を解決するための正しい手順は何ですか (myfolder とその変更を保持したい場合)?
編集: 説明する Windows コマンド ライン スクリプト:
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 ""
そして、これがそのスクリプトを実行した出力です (最後にコミットの失敗に注意してください)。
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