代码之家  ›  专栏  ›  技术社区  ›  Binil Thomas

包括SVN diff中的新文件

  •  30
  • Binil Thomas  · 技术社区  · 14 年前

    我有一个脚本,它构建了我的应用程序,将其上载到远程计算机,在那里运行性能测试,并捕获一些我关心的指标。该脚本为我在工作区中所做的本地修改创建一个补丁文件,并将其与性能编号一起显示。这有助于我比较各种调优选项的效果。如果我想在以后重新创建我的工作区,我可以使用SVN修订号和补丁。

    svn diff 除非明确使用,否则不会报告我添加到工作区的新文件 svn add 先看他们。有没有办法创建一个补丁文件,其中也包括新的文件?

    附言:有人问了类似的问题 here 但我的回答不充分。

    2 回复  |  直到 9 年前
        1
  •  41
  •   Alex Jasmin    14 年前

    svn diff svn commit

    svn status 所有以问号开头的行:

    svn status | grep ^? | sed -r 's/^\? +//' > ../unversioned_files_list.txt
    

    然后您可以将该文件列表传递给 svn add 使用 xargs :

    xargs -r -d '\n' svn add < ../unversioned_files_list.txt
    

    然后产生补丁:

    svn diff > ../my_patch.patch
    

    如果不想继续添加这些文件,请使用文件列表取消添加:

    xargs -r -d '\n' svn rm --keep-local < ../unversioned_files_list.txt
    
        2
  •  12
  •   guiwuu    11 年前

    谢谢亚历山大。起初,他的方法在我的情况下不起作用。我确信所有的新文件都是编出来的 A 在里面 svn status 但是,diff文件仍然为空。最后,我发现 支持向量机状态 输出,在我的例子中,第四列都用 + ,像:

    $ svn st
    M      .
    A  +    New.java
    

    这意味着该项目是为 addition-with-history 〔1〕。这通常发生在你 svn move svn copy 文件或目录[2]。在我看来, New.java svn merged 来自另一个分支,包括该分支中以前的提交历史记录。让我们删除这些历史信息。

    首先,找到所有 添加历史记录 项目:

    svn status | grep ^A | sed -r 's/^A[ +]+//' > /tmp/add_list
    

    或者,删除中的目录路径 /tmp/add_list 以避免在下一步中出现警告。

    接下来,删除他们的历史提交信息 svn remove :

    xargs -r -d '\n' svn remove --keep-local --force < /tmp/add_list
    

    然后,回到Alexandre的解决方案,再次将它们添加到Subversion中,并得到diff。

    参考文献:

    [1]http://svnbook.red-bean.com/nightly/en/svn.ref.svn.c.status.html
    [2]http://www.linuxtopia.org/online_books/programming_tool_guides/version_control_with_subversion/svn.ref.svn.c.status.html