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

File 如何使用SVN提交除一个以外的所有文件,file,svn,command,commit,File,Svn,Command,Commit,我想提交所有修改过的文件,除了一个使用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 diff file4 > tmp.patch svn revert file4 svn ci -m "Commit 1" svn patch t

我想提交所有修改过的文件,除了一个使用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 diff file4 > tmp.patch
svn revert file4
svn ci -m "Commit 1"
svn patch tmp.patch
但当大量文件出现时,我试图简化我的工作:

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

虽然我相信您可以使用更复杂的
awk
命令行来解决您提出的问题,但既然我们只讨论一个文件,为什么不呢

  • 将文件复制到临时位置
  • svn还原
    修改后的文件以恢复原始文件
  • 提交整个存储库
  • 将修改过的文件复制回来

  • 简单、简单、快速。

    您可以通过将带有脚本的文件添加到脚本并提交来在某种程度上改进您的方法。在提交之前,您可以检查列表以确保它包含正确的项


    请参见
    svn ci--help
    中的
    svn changelist--help
    --changelist
    选项,您可以这样做:

    svn ci -m "Commit 1" file1 file2 file3
    svn ci -m "Commit 2" file4
    
    svn diff file4 > tmp.patch
    svn revert file4
    svn ci -m "Commit 1"
    svn patch tmp.patch
    
    此时,除了选项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,-变更列表:

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

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

    svn ci `ls | grep -v file4`
    

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

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

    svn补丁
    在1.7中添加。在本例中,我使用了
    patch-p0-I tmp.patch
    ,而不是最后一行。