2012-06-29 26 views
1

如果我使用log -k它會拉出兩個變更集,但是當我添加 - 追加或-f時,它會丟失其中一個變更集。爲什麼會這樣?爲什麼mercurial的日誌追隨選項遺漏變更集?

(我認爲--follow只能添加變更到返回,也就是說,他們的名字之前就修改所選文件的那些改變爲當前的名稱設置。)

回答

0

-f選項只能追溯通過始發版本的祖先/後代的歷史記錄。

我的猜測是-k(關鍵字搜索)是從您的回購中的兩個分支返回結果。因此,通過添加-f/--follow,您將結果限制爲與起始修訂直接相關的變更集。

0

我回來了,因爲我終於得到(主要)什麼 - 遵循保持和它下降。雖然愛德華基本上是對的,但在對他的答案進行測試後我感到困惑,因爲我誤解了「開始修訂」的含義,並且關於它跟隨祖先/後代的方式也有一些細微差別,導致結果沒有符合我的預期。

這裏有一個簡單的分支庫:

% 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。 (因爲這個原因,當變更集從結果中刪除時,可以給出一個警告消息嗎?)所以,當我進行棘手的處理,取決於 - 關注時,我運行時沒有 - 跟進,比較以確保我不是失去一切。

相關問題