如何使用 SVN 提交除一个文件之外的所有文件

Posted

技术标签:

【中文标题】如何使用 SVN 提交除一个文件之外的所有文件【英文标题】:How commit all files except one with SVN 【发布时间】:2012-05-31 03:01:17 【问题描述】:

我想提交所有修改过的文件,除了一个使用 Subversion 的文件。

所以这里是场景:

$ svn st
M    file1
M    file2
M    file3
M    file4

我可以这样做:

svn ci -m "Commit 1" file1 file2 file3
svn ci -m "Commit 2" file4

但是当有大量文件时,我试图简化我的工作:

svn ci -m "Commit 1" `svn st | awk 'print $2' | grep -v file4`
svn ci -m "Commit 2" file4

这个解决方案非常脆弱,因为这个场景不起作用:

$ svn st
M    file1
M    file2
D    file3
A +  file4

我认为 SVN 没有针对我的问题的内置解决方案,但我不确定。还有其他方法吗?

【问题讨论】:

【参考方案1】:

选项 1,AWK:

svn ci -m "Commit 1" `svn st | awk 'print $NF' | grep -v file4`
svn ci -m "Commit 2" file4

选项 2,--targets:

svn ci -m "Commit 1" --targets filesToCommit.txt
svn ci -m "Commit 2" file4

选项 3,--changelist:

svn changelist my-changelist file1 file2 file3
svn ci -m "Commit 1" --changelist my-changelist
svn ci -m "Commit 2" file4

【讨论】:

【参考方案2】:

你可以这样做:

svn diff file4 > tmp.patch
svn revert file4
svn ci -m "Commit 1"
svn patch tmp.patch

此时所有文件都已提交,除了file4

【讨论】:

svn patch 在 1.7 中添加。在本例中,我使用了patch -p0 -i tmp.patch 而不是最后一行。【参考方案3】:

使用更改列表提交除一个之外的所有内容:

svn changelist my-list -R .
svn changelist --remove file4
svn ci -m "Commit 1" --changelist my-list
svn ci -m "Commit 2" file4

【讨论】:

【参考方案4】:

虽然我确信您可以使用更复杂的awk 命令行来制定解决方案,因为我们只讨论一个文件,为什么不呢

    将文件复制到临时位置 svn revert修改后的文件取回原件 提交整个存储库 将修改后的文件复制回去

简单、容易、快速。

【讨论】:

【参考方案5】:

您可以通过将带有脚本的文件添加到change list 并提交它来稍微改进您的方法。您可以在提交之前检查列表以确保它包含正确的项目。

参见svn ci --help 中的svn changelist --help--changelist 选项。

【讨论】:

【参考方案6】:

只需提交过滤后的文件列表。

svn ci `ls | grep -v file4`

【讨论】:

以上是关于如何使用 SVN 提交除一个文件之外的所有文件的主要内容,如果未能解决你的问题,请参考以下文章

如何使 JFileChooser 显示除 .huff 文件之外的所有类型的文件 [重复]

如何在下拉列表中获取除隐藏和提交按钮之外的所有表单字段

如何通过非交互式压缩除最近的提交之外的所有提交来减少膨胀的Git仓库的大小?

如何从文件夹中添加除iverilog命令行指令中的一个文件之外的所有文件?

如何重写历史记录,以便除我已经移动的文件之外的所有文件都在子目录中?

如何重写历史记录,以便除我已经移动的文件之外的所有文件都在子目录中?