次のようにしてチェンジリストを作成しました...
$ svn changelist my_changes
...ファイルを追加し、チェンジリストをコミットしました...
$ svn ci --changelist my_changes --keep-changelists
...これで、チェンジリストが「保持」され、ステータスを表示するたびに表示されます。
$ svn status
... modified/added/deleted files listed here...
--- Changelist 'my_changes':
... files that are a part of this changelist listed here...
理由でチェンジリストを「保持」しましたが、もう必要ないので、削除する準備ができています。このチェンジリストをSVNから削除するにはどうすればよいですか?チェンジリストからファイルを削除する方法は知っていますが、チェンジリスト自体は削除しません。
関連するすべてのファイルをチェンジリストから削除すると、消えます。
https://stackoverflow.com/a/15992735/253468 を参照してください
svn changelist --remove --recursive --cl my_changes .
すなわちsvn changelist --remove file.name
D:\Programming>mkdir test
D:\Programming>cd test
D:\Programming\test>svnadmin create .
D:\Programming\test>svn co file:///D:\Programming\test co
Checked out revision 0.
D:\Programming\test>cd co
D:\Programming\test\co>echo "hello" > test.file
D:\Programming\test\co>svn add test.file
A test.file
D:\Programming\test\co>svn status
A test.file
D:\Programming\test\co>svn changelist mycl test.file
A [mycl] test.file
D:\Programming\test\co>svn status
--- Changelist 'mycl':
A test.file
D:\Programming\test\co>svn changelist --remove test.file
D [mycl] test.file
D:\Programming\test\co>svn status
A test.file
# Remove all files from a specific CL
# Usage: svn_remove_cl my_changes
function svn_remove_cl() {
svn status |\
sed -n "/--- Changelist '$1':/,/--- Changelist.*/p" |\
grep -v '^--- Changelist' |\
awk '{print $2}' |\
xargs svn changelist --remove
}
説明:
svn status
:変更されたすべてのファイルを出力しますsed
:チェンジリストを見つけ、CLタイトルの後の出力を次のCLまたはsvn status
の出力の終わりまで取得しますgrep
:バッファからCLタイトルを削除しますawk
:ファイルステータスを削除し、ファイル名のみを保持します(2番目の列)xargs
:各行をsvn changelist
への引数として入れます~/tmp/wc$ svn status
A d
--- Changelist 'cl_a':
A a
A e
A f
--- Changelist 'cl_x':
A b
A c
~/tmp/wc$ svn_remove_cl cl_x
Path 'b' is no longer a member of a changelist.
Path 'c' is no longer a member of a changelist.
~/tmp/wc$ svn status
A b
A c
A d
--- Changelist 'cl_a':
A a
A e
A f
1つのチェンジリスト(my_changesなど)のみを削除する場合は、作業コピーの最上位フォルダーに移動して実行します。
svn changelist --remove --recursive --cl my_changes .
不思議に思っている人のために、svnを使用して1つのコマンドでこれを行うことができます。変更リストの下にあるファイルのレベルディレクトリに移動して、次を実行します。
svn changelist --remove --recursive .
これにより、現在のディレクトリにあるすべてのファイルがループ処理され、変更リストからの関連付けの解除が試行されます。