【问题标题】:Including new files in SVN diff在 SVN diff 中包含新文件
【发布时间】:2011-05-14 00:32:05
【问题描述】:

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

svn diff 不会报告我添加到工作区的新文件,除非我首先明确地在它们上使用svn add。有什么方法可以创建一个包含新文件的补丁文件吗?

PS:有人问过类似的问题here,但没有得到充分的回答,IMO。

【问题讨论】:

  • 这是怎么回事?使用 SVN 准备补丁就像准备提交一样。您运行svn statussvn diff 来查看您需要的所有部分是否都在那里,然后revertaddrm 并编辑文件直到您对所做的更改感到满意为止。
  • @Alexandre,我想要一种 scriptable 方法来捕获我的本地更改,以便稍后我可以使用“此增量,已应用”信息重新创建工作区的状态到修订号 XYZ" 或类似的东西。
  • 您也许可以使用svn diff --show-copies-as-adds 来做您想做的事情,请参阅stackoverflow.com/a/2185988/131504

标签: svn diff patch


【解决方案1】:

要使svn diff 包含本地工作副本中的所有未版本控制文件,您必须首先添加这些文件。 svn diff 输出的变更集与 svn commit 将使用的变更集相同。

如果您确定应该在此处添加所有未版本控制的文件,那么您可以这样做。

通过从svn status 的输出中提取所有以问号开头的行来准备未版本化文件的列表:

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

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

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

【讨论】:

  • 感谢 Alexandre,看起来它可能会起作用。我会尝试并返回。
  • 我找不到比丹尼斯更好的词来祝贺你了。 :-)
  • 这是一个非常好的答案!
  • 请注意,对于 mac,它是 'sed -E'。
【解决方案2】:

谢谢亚历山大。起初,他的方法对我不起作用。我确信所有新文件都是在svn status 中创建的A,但是,差异文件仍然是空的。最后,我发现svn status 输出的差异,在我的例子中,第四列都填充了+,比如:

$ svn st
M      .
A  +    New.java

这意味着该项目计划用于addition-with-history[1]。这通常发生在您svn movesvn copy 文件或目录[2] 时。在我的例子中,New.java 是来自另一个分支的svn merged,包括该分支中以前的提交历史。让我们删除这些历史信息。

首先,找到所有addition-with-history项目:

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 并获取差异。

参考资料:

[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

【讨论】:

    猜你喜欢
    • 2023-03-13
    • 1970-01-01
    • 2010-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多