2012-05-24 53 views
19

我想提交除使用Subversion之外的所有文件。如何提交除SVN之外的所有文件

因此,这里的情景:

$ 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没有针对我的问题的内置解决方案,但我不确定。任何其他方法?

回答

21

选项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, - 更新列表:

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

虽然我敢肯定,你可以制定出一个解决方案就像你打算使用更复杂的awk命令行,因为我们谈论的只是一个文件,为什么不

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

简单,简单,快捷。

4

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

请参阅svn changelist --help--changelist选项svn ci --help

13

你可以这样说:

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

在这一点上的所有文件上犯下除了file4

+1

'SVN patch'。我在这个例子中使用了'patch -p0 -i tmp.patch'而不是最后一行。 – Rich

0

只提交过滤的文件列表。

svn ci `ls | grep -v file4` 
4

Commiting所有除一个使用变更表:在1.7中加入

svn changelist my-list -R . 
svn changelist --remove file4 
svn ci -m "Commit 1" --changelist my-list 
svn ci -m "Commit 2" file4 
相关问题