查找在 Mercurial 中复制的文件

Find files copied in Mercurial

我注意到文件 original.txt 中有一个错误。我怎样才能找到通过 hg copy original.txt copy.txt 创建的所有文件 copy.txt

我看了Mercurial revset。唯一提到 "copies" 的时间是:

"follow([file[, startrev]])" An alias for "::." (ancestors of the working directory's first parent). If file pattern is specified, the histories of files matching given pattern in the revision given by startrev are followed, including copies.

所以显然使用 hg log -r "follow('copy.txt')" 之类的东西我可以发现它是从 original.txt 复制的,但不是相反的(其中 original.txt被复制 ).

如何找到复制的文件?

肮脏的方式

(当信号串合并到新文件时,可能会在不对合并集进行更正的情况下给出 FP)

如果您在 original.txt 中有唯一数据(跨越 回购中的所有文件 ),您可以像 hg grep -ldq "ID"[=15= 这样的字符串使用 grep 回购]

更自然的方式

因为更改集的重命名文件是 "delete old file, add new",您可以

  • removes(original.txt)
  • 形式的 revset 中使用 "removes(pattern)" 谓词
  • 对日志使用特殊模板-T"{file_copies}\n"

    hg log -r "removes(original.txt)" -T"{file_copies}\n" original.txt

revset 可以作为参数化 revsetalias 重复使用(对于 any 文件),使用 revset+template 的日志也可以转换为别名

加法

为了减少 "just copy" 变更集的噪音输出,可以使用修改过的 revset(TBT!,我太懒了)

-r“!修改(original.txt)”