如何查找Mercurial中由original.txt复制生成的所有copy.txt文件
如何在Mercurial中反向查找源文件的所有副本
你说得没错,hg log -r "follow('copy.txt')"只能追踪单个文件的正向历史(从源到副本),但要找出original.txt被复制成了哪些文件,我们可以用Mercurial revset的copiedfrom()函数——这就是专门用来做反向复制追踪的工具。
下面是两种实用的方法:
1. 一次性列出所有从original.txt复制而来的文件
运行这条命令,就能直接看到所有涉及original.txt作为源的复制操作,以及对应的目标文件:
hg log -r "copiedfrom('original.txt')" --template "{join(file_copies, '\n')}\n"
举个例子,输出会像这样:
original.txt -> copy1.txt
original.txt -> copy2.txt
如果只想看目标文件名(去掉源文件的重复内容),可以用这个更简洁的模板:
hg log -r "copiedfrom('original.txt')" --template "{foreach split(file_copies, ' -> '), parts} {parts[1]}\n"
2. 验证某个特定文件是否来自original.txt
如果你只是想确认某个文件是不是从original.txt复制的,可以用这条命令精准筛选:
hg log -r "copiedfrom('original.txt') and file('copy.txt')"
如果有结果返回,就说明copy.txt确实是original.txt的副本,同时还会显示对应的变更集详情。
小提示
- 这个方法只追踪通过
hg copy或hg mv(移动本质是复制+删除)创建的显式复制关系,手动复制文件后用hg add的不会被识别哦。 - 命令会自动遍历仓库的所有分支历史,不需要额外添加分支参数。
内容的提问来源于stack exchange,提问作者Peter
相关产品推荐
相关产品推荐

