查找在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
-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的模板可能会很有趣!