48

私は次のようにしてチェンジリストを作成しました...

$ 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 から削除するにはどうすればよいですか? チェンジリストからファイルを削除する方法は知っていますが、チェンジリスト自体は知りません。

4

3 に答える 3

62

関連するすべてのファイルをチェンジリストから削除すると、消えます。

正式な方法

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

Bash での自動化

# 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 またはsvn statusの出力の終わりまで、CL タイトルの後に出力を取得します
  • 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
于 2012-10-15T23:18:50.730 に答える
42

1 つの変更リスト (例: my_changes) だけを削除する場合は、作業コピーの最上位フォルダーに移動して、次を実行します。

svn changelist --remove --recursive --cl my_changes .
于 2013-04-13T20:46:09.537 に答える
41

疑問に思っている方のために説明すると、svn を使用して 1 つのコマンドでこれを行うことができます。変更リストの下にあるファイルの to レベルのディレクトリに移動し、次を実行します。

svn changelist --remove --recursive .

これは、現在のディレクトリの下にあるすべてのファイルをループし、変更リストからそれらの関連付けを解除しようとします。

于 2013-02-25T18:30:36.353 に答える