【问题标题】:Generate Hg diff (or patch) that Only includes content for files modified by a revision/revset生成仅包含由修订/修订集修改的文件的内容的 Hg 差异(或补丁)
【发布时间】:2016-01-31 01:31:29
【问题描述】:

给定一个大型代码库和两个修订或修订集(例如,一个本地“源”和一个目标),它们可能共享也可能不共享最近的父级,并且通常包含大量不相关的文件增量;

如何生成差异输出以比较仅针对源修订集中修改的文件的更改?

(这应该是祖先之间的差异;但适用于修订集中包含的文件。)

使用hg diff -r target -r source 显示所有祖先的变化,即使是源版本未修改的文件。

此外,这应该在不了解目录结构的情况下完成。

【问题讨论】:

    标签: version-control mercurial diff


    【解决方案1】:

    如果我理解正确,您希望在 sourcetarget 之间有一个差异,但您希望将其限制为在变更集 source 中修改的文件。您可以分两步完成(使用别名或 shell 脚本轻松组装成一个):

    1. 列出source中修改的文件:

      hg log -r source --template '{files}'
      

      这只是输出一个文件名列表。

    2. 请求这些文件的差异:

      hg diff -r target -r source $(hg log -r source --template '{files}')
      

    第 2 步是一个带有“命令替换”$(...) 的 bash 命令,它插入了第 1 步的输出。其他方法也是可以的。

    【讨论】:

    • 这就是我要找的。我希望有一个“内置”功能,但这绝对比我使用的xargs 方法更干净。现在只为我的同事将其适应 PowerShell :}
    【解决方案2】:

    来自hg help diff

    如果只指定一个修订版,则将该修订版与工作目录进行比较

    即你可以试试hg up $SOURCE; hg diff -r $TARGET

    【讨论】:

    • 假设一个干净的工作目录,这似乎等同于hg diff -r $TARGET -r .,它还捕获了来自所有在祖先不同的文件中的差异(即不仅仅是那些在特定修订集下修改)。
    • 我还尝试使用脏工作目录(和单个 -r),它显示了祖先中所有修改文件的差异。
    猜你喜欢
    • 2020-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-14
    • 2012-08-02
    • 1970-01-01
    • 2015-07-08
    • 1970-01-01
    相关资源
    最近更新 更多