查找在Mercurial中复制的文件

查找在Mercurial中复制的文件,mercurial,Mercurial,我注意到文件original.txt中有一个错误。然后,我如何才能找到通过hg copy original.txt copy.txt创建的所有文件copy.txt 我看了看。提及“副本”的唯一时间是: “遵循([file[,startrev]])” “:”(工作目录第一个父目录的祖先)的别名。如果指定了filepattern,则遵循与startrev给定版本中给定模式匹配的文件的历史记录,包括副本 因此,显然,使用类似于hg log-r“follow('copy.txt')”的方法,我可以发现它

我注意到文件
original.txt
中有一个错误。然后,我如何才能找到通过
hg copy original.txt copy.txt
创建的所有文件
copy.txt

我看了看。提及“副本”的唯一时间是:

“遵循([file[,startrev]])”
“:”
(工作目录第一个父目录的祖先)的别名。如果指定了
file
pattern,则遵循与
startrev
给定版本中给定模式匹配的文件的历史记录,包括副本

因此,显然,使用类似于
hg log-r“follow('copy.txt')”
的方法,我可以发现它是从
original.txt
复制的,但不是从相反的方向复制的(其中
original.txt


如何找到复制的文件?

肮脏的方式

(当信号字符串合并到新文件时,可能会在合并集上给出FP而不进行更正)

如果您在
original.txt
中有唯一的数据(在repo中的所有文件中),您可以像
hg grep-ldq“ID”

更自然的方式

因为变更集的重命名文件是“删除旧文件,添加新文件”,所以您可以

  • removes(original.txt)
  • 对日志使用特殊模板
    -T“{file\u copies}\n”

    hg log-r“删除(original.txt)”-T“{file\u copies}\n”original.txt

revset可以作为参数化的revsetalias(对于任何文件)重用,带有revset+模板的日志也可以转换为alias

添加

为了减少“只是复制”变更集的噪声输出,可以使用修改的revset(待定,我太懒了)


-r“!modifies(original.txt)”

JFYI此(第二种方式)仅适用于重命名,但不适用于副本,对吗?(FP=误报?@Peter-是的,对于“纯拷贝”,您只能删除revset以获得结果。FP是“误报”,是的,结果是
hg log-T“{join(file_copies,'\n')}\n”-r first(file('original.txt'):::| grep original.txt
@Peter-OK,而1)我看不出使用稍微复杂的模板(我可以做到)进行revset 2的原因如果在创建original.txt之前有很多变更集,搜索这些变更集的速度非常慢,而且不需要。
-r first(文件('original.txt'):
是我试图避免这种大的减速。(如果在创建更改集之后有很多更改集,那么速度仍然很慢,但我想对此无能为力,或者是真的吗?)是的,一个更好的避免外部grep的模板可能会很有趣!