如何从SVN中删除现有的更改列表

Hri*_*sto 38 svn changelist

我做了一个改变清单......

$ svn changelist my_changes
Run Code Online (Sandbox Code Playgroud)

...向其添加文件,然后提交更改列表......

$ svn ci --changelist my_changes --keep-changelists
Run Code Online (Sandbox Code Playgroud)

...所以现在,我已"保留"我的更改列表,每次查看状态时都会显示.

$ svn status
... modified/added/deleted files listed here...

--- Changelist 'my_changes':
... files that are a part of this changelist listed here...
Run Code Online (Sandbox Code Playgroud)

我"保留"更改列表是有原因的,但我不再需要它,所以我准备删除它.如何从SVN中删除此更改列表?我知道如何从更改列表中删除文件,但不知道更改列表本身.

TWi*_*Rob 51

从更改列表中删除所有相关文件,它将消失.

官方方式

请参阅/sf/answers/1119491481/

svn changelist --remove --recursive --cl my_changes .
Run Code Online (Sandbox Code Playgroud)

手动方式

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
Run Code Online (Sandbox Code Playgroud)

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
}
Run Code Online (Sandbox Code Playgroud)

说明:

  • svn status:输出所有修改过的文件
  • sed:找到更改列表并在CL标题之后获取输出,直到下一个CL或svn status输出结束
  • grep:从缓冲区中删除CL标题
  • awk:删除文件状态,只保留文件名(即第二列)
  • 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
Run Code Online (Sandbox Code Playgroud)


小智 40

如果您只想删除一个更改列表(例如my_changes),请移至工作副本的顶级文件夹并运行:

svn changelist --remove --recursive --cl my_changes .
Run Code Online (Sandbox Code Playgroud)

  • `svn changelist --remove --changelist my_changes --depth infinity .`也应该完成这项工作. (2认同)

小智 38

对于那些想知道的人,你可以用svn的单个命令来做到这一点.只需导航到您的更改列表下的文件的级别目录并运行:

svn changelist --remove --recursive .
Run Code Online (Sandbox Code Playgroud)

这将循环遍历当前目录下的所有文件,并尝试将它们与更改列表取消关联.