23

我想提交所有修改过的文件,除了一个使用 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 没有针对我的问题的内置解决方案,但我不确定。还有其他方法吗?

4

6 回答 6

23

选项 1,AWK:

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

选项 2,--目标:

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
于 2012-05-25T12:05:41.007 回答
14

你可以这样做:

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

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

于 2012-05-24T14:56:24.070 回答
5

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

svn changelist my-list -R .
svn changelist --remove file4
svn ci -m "Commit 1" --changelist my-list
svn ci -m "Commit 2" file4
于 2015-04-28T12:03:57.447 回答
4

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

  1. 将文件复制到临时位置
  2. svn revert修改后的文件以取回原始文件
  3. 提交整个存储库
  4. 将修改后的文件复制回来

简单、容易、快速。

于 2012-05-24T14:06:33.140 回答
4

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

svn changelist --help--changelist选项svn ci --help

于 2012-05-24T14:08:01.603 回答
0

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

svn ci `ls | grep -v file4`
于 2014-09-26T08:25:32.353 回答