如果我使用log -k它會拉出兩個變更集,但是當我添加 - 追加或-f時,它會丟失其中一個變更集。爲什麼會這樣?爲什麼mercurial的日誌追隨選項遺漏變更集?
(我認爲--follow只能添加變更到返回,也就是說,他們的名字之前就修改所選文件的那些改變爲當前的名稱設置。)
如果我使用log -k它會拉出兩個變更集,但是當我添加 - 追加或-f時,它會丟失其中一個變更集。爲什麼會這樣?爲什麼mercurial的日誌追隨選項遺漏變更集?
(我認爲--follow只能添加變更到返回,也就是說,他們的名字之前就修改所選文件的那些改變爲當前的名稱設置。)
的-f
選項只能追溯通過始發版本的祖先/後代的歷史記錄。
我的猜測是-k
(關鍵字搜索)是從您的回購中的兩個分支返回結果。因此,通過添加-f
/--follow
,您將結果限制爲與起始修訂直接相關的變更集。
我回來了,因爲我終於得到(主要)什麼 - 遵循保持和它下降。雖然愛德華基本上是對的,但在對他的答案進行測試後我感到困惑,因爲我誤解了「開始修訂」的含義,並且關於它跟隨祖先/後代的方式也有一些細微差別,導致結果沒有符合我的預期。
這裏有一個簡單的分支庫:
% 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
我還沒有考慮爲它做什麼清晰,簡明的規範,我認爲這是棘手的產生是「安全」的後續revsets。 (因爲這個原因,當變更集從結果中刪除時,可以給出一個警告消息嗎?)所以,當我進行棘手的處理,取決於 - 關注時,我運行時沒有 - 跟進,比較以確保我不是失去一切。
我認爲你的期望是有效的,並且我發現--follow
當與其他選項結合時會有點bug。
看到這些證實了(而且有些舊)的錯誤:
對我來說,解決辦法是使用--rev "follow('my/filename')"
revset語法,而不是問題的--follow
標誌。
也許給一個鏡頭?