生成仅包含 revision/revset 修改的文件内容的 Hg diff(或补丁)

Generate Hg diff (or patch) that Only includes content for files modified by a revision/revset

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

如何生成 diff 输出来比较 仅针对在源 revset 本身中修改的 文件的更改?

(这应该是祖先之间的增量;但是 用于 revset 中包含的文件。)

使用 hg diff -r target -r source 显示 所有 祖先的变化,即使对于未被源部分修改的文件也是如此。

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

来自hg help diff

If only one revision is specified then that revision is compared to the working directory

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

如果我没理解错的话,您想要版本 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 是带有 "command substitution" $(...) 的 bash 命令,它插入步骤一的输出。其他方法也是可能的。