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



我通过做创建了一个变更列表...

$ 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:Programmingtest>svnadmin create .
D:Programmingtest>svn co file:///D:Programmingtest co
Checked out revision 0.
D:Programmingtest>cd co
D:Programmingtestco>echo "hello" > test.file
D:Programmingtestco>svn add test.file
A       test.file
D:Programmingtestco>svn status
A       test.file
D:Programmingtestco>svn changelist mycl test.file
A [mycl] test.file
D:Programmingtestco>svn status
--- Changelist 'mycl':
A       test.file
D:Programmingtestco>svn changelist --remove test.file
D [mycl] test.file
D:Programmingtestco>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 标题之后,直到下一个 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

对于那些想知道的人,您可以使用带有 svn 的单个命令来执行此操作。只需导航到更改列表下文件的 to 级别目录并运行:

svn changelist --remove --recursive .

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

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

svn changelist --remove --recursive --cl my_changes .

相关内容

  • 没有找到相关文章

最新更新