2015-08-03 101 views
0

我們正在使用Mercurial來管理我們的代碼並將其設置爲兩個主要分支;默認和穩定。確定何時從另一個分支合併文件(Mercurial)

我們希望能夠找到何時將特定文件添加到穩定分支,但一直無法弄清楚這是如何實現的。

作爲一個例子,我們有一個穩定分支中的文件(從默認合併),但是當試圖確定文件在什麼階段被合併到穩定分支中時,我們只能看到文件何時被添加到存儲庫(默認分支)。

hg log <filename> --verbose 

...僅示出了單個變更。

通過遍歷每個必要的修訂並確定文件出現在哪個文件中的繁瑣過程,可以計算出它的添加時間,但希望有一個更優雅的方法!

編輯:下面的步驟可以用來證明這個問題:

hg init 

echo "syntax: glob" > .hgignore 
hg addremove 
hg commit -u testuser -m "new repository" 


hg branch stable 
hg commit -u testuser -m "new branch" 
hg update default 

echo "The quick red fox jumps over the lazy brown dog." > test.txt 
hg addremove 
hg commit -u testuser -m "new file" 

hg update stable 
hg merge default 
hg commit -u testuser -m 'mock release' 
hg update default 
hg merge stable 
hg commit -u testuser -m "switch to development branch (default)" 

test.txt文件是現在穩定的存儲庫的一部分....

hg update stable --clean 
hg log .\test.txt 

changeset: 3:ca4338ed2c56 
user:  testuser 
date:  Mon Aug 03 15:52:48 2015 +0100 
summary:  new file 

...然而,隨着-b穩定選項沒有顯示結果。

回答

0

您可以使用hg log revsets(很長的路要走,更好的結果),或者選擇用日誌選項ANS眼睛短(和輕度污染)的方式:

hg log FILENAME -b stable會產生變更的名單,最早的(由REV-ID)會出現文件名的時刻分支

編輯: 測試了這種歷史的樣品回購

汞柱登錄-v

changeset: 4:b9ab93cb4a0a 
tag:   tip 
parent:  2:4733dc2d6b62 
parent:  3:bdd73f64f96f 
user:  * 
date:  Wed Aug 05 00:37:55 2015 +0500 
description: 
Back to devel 


changeset: 3:bdd73f64f96f 
branch:  stable 
parent:  1:7c6de35e9ca2 
parent:  2:4733dc2d6b62 
user:  * 
date:  Wed Aug 05 00:36:54 2015 +0500 
description: 
Mock release 

changeset: 2:4733dc2d6b62 
parent:  0:81adee946a99 
user:  * 
date:  Wed Aug 05 00:35:13 2015 +0500 
files:  test.txt 
description: 
File added 

changeset: 1:7c6de35e9ca2 
branch:  stable 
user:  * 
date:  Wed Aug 05 00:33:26 2015 +0500 
description: 
Stable branch created 

changeset: 0:81adee946a99 
user:  * 
date:  Wed Aug 05 00:32:22 2015 +0500 
files:  .hgignore 
description: 
New repo 

(注:在某些變更失蹤 「文件」,尤其是 - mergesets:不變文件沒有出現在列表),但

hg log -r "contains('test.txt')" -T "{rev}:{node|short} - {branch}\n" 
2:4733dc2d6b62 - default 
3:bdd73f64f96f - stable 
4:b9ab93cb4a0a - default 

因爲hg help revsets

「包含(模式)「
修訂版的清單包含一個匹配 模式的文件(但可能不會修改它)。

和最終(額外拋光)revset日誌:contains('test.txt') and branch (stable) and merge()

hg log -r "contains('test.txt') and branch (stable) and merge()" -T "{rev}:{node|short}\n" 
3:bdd73f64f96f 

對於許多合併的操作,你可能需要有一個謂語revset包圍的第一(),以獲得第一個出現的文件。而這樣的revset(參數化)是很好的候選人將它[revsetalias]和,也許,記錄與revsetalias - 以[alias]

樣品2

只是用真實HGSubversion repository隨機文件

hg log -r "contains('tests/test_pull.py') and branch (stable) and merge()" -T "{rev}:{node|short}\n" 
1106:5cb6c95e0283 
1255:139a44a63090 
1303:553c40023729 
1323:6fd0ec01553b 
+0

隱而不宣」 t似乎爲我工作。即使我可以看到引用的文件存在於穩定的存儲庫中,-b穩定選項也沒有結果。我會舉例說明如何重現我所看到的,這可能會更好地解釋問題(或突出顯示我做錯了什麼!)。 –

+0

@JinxedNZ - 添加了解決方案(草案) –

相關問題