如何使用 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命令行指令中的一个文件之外的所有文件?