如果我使用log -k,它会提取两个更改集,但是当我添加--follow或-f时,它会错过其中一个。那为什么会这样?
(我认为--follow只能将更改集添加到返回的集合中,即在名称更改为当前名称之前修改了所选文件的那些。)
答案 0 :(得分:1)
-f
选项仅遵循起始修订版的祖先/后代的历史记录。
我的猜测是-k
(关键字搜索)从您的仓库中的两个分支返回结果。因此,通过添加-f
/ --follow
,您可以将结果限制为与起始修订版直接相关的变更集。
答案 1 :(得分:1)
我回到这里是因为我终于(大部分)得到了什么 - 以下是什么,以及它下降了什么。尽管爱德华基本上是正确的,但在测试出他的答案后我感到很困惑,因为我误解了"开始修改的含义,"关于它跟随祖先/后代的方式有一些细微差别导致结果不符合我的预期。
这是一个带有简单分支的存储库:
% hg glog --template {rev}
@ 2
|
| o 1
|/
o 0
% hg glog --template {rev} -r '0+1+2'
@ 2
|
| o 1
|/
o 0
% hg glog --template {rev} -r '1+2+0'
@ 2
|
| o 1
|/
o 0
使用--follow
的下一个示例说明了"起始修订版"与--follow
相关的是规范中的第一个(不是存储库中最早的或类似的东西),甚至后续的排序都很重要。
如果我们从共享的祖先开始,那么所有内容都会被包含在内。
% hg glog --template {rev} -r '0+1+2' --follow
@ 2
|
| o 1
|/
o 0
如果我们不这样做,那么结果甚至取决于后来的顺序。看起来它可以遍历图形,但只能在一个方向上(对于祖先或后代,但不能同时在同一个调用中。)
% hg glog --template {rev} -r '1+2+0' --follow
o 1
|
% hg glog --template {rev} -r '1+0+2' --follow
o 1
|
o 0
如果您手动订购,这不仅仅是一个问题。使用基本原语,您可以结束不同顺序的修订,从而导致行为混乱。
% hg log --template {rev} -r 'all()'
012
% hg log --template {rev} -r 'all()' --follow
012
% hg log --template {rev} -r 'reverse(all())'
210
% hg log --template {rev} -r 'reverse(all())' --follow
20
我仍然没有考虑清楚简洁的规范,并且我认为生成“安全”的转换技术非常棘手。跟随。 (因为这个原因,当结果中的变更集被删除时,hg会发出警告信息吗?)所以,当我做依赖于--follow的棘手处理时,我运行时没有--follow,比较以确保我&# 39;我不会失去任何东西。
答案 2 :(得分:1)
我认为您的期望是有效的,并且我发现--follow
与其他选项结合时会有点错误。
查看这些已确认的(有些旧的)错误:
对我来说,解决方法是使用--rev "follow('my/filename')"
revset语法,而不是有问题的--follow
标记。
也许给那个镜头?