2010-07-01 44 views
3

我是新來的汞。我有一個功能正在工作,但現在不是。我想逐步恢復更改,直到我到達修訂版本的位置。我不太確定要做到這一點的最佳方法是什麼。Hg:如何逐步走過變化?

我試圖將repo克隆到舊版本,並看到它在那裏工作。那麼...現在我該如何更新後續更改?在克隆的回購中,defaulttip版本是我克隆它的。

我需要應用補丁嗎?貨架改變了嗎?我不太確定。

回答

3

您應該使用bisect command快速確定您的功能何時停止工作。其工作原理如下:

你開始通過重置平分狀態,並通過標記您的當前工​​作目錄的父版本一樣糟糕:

hg bisect --reset 
hg bisect --bad 

現在做一個關於當你認爲該功能正在猜測。如果你認爲這是工作在6月1日,那麼你可以做

hg update -d '<Jun 1' 

update command是你用什麼來更新工作目錄,以匹配給定的變更。有關日期格式的列表,請參閱hg help dates。現在,您應該測試這個版本,如果該功能在這裏工作,那麼你將其標記爲好:

hg bisect --good 

如果功能在此變更工作,然後將其標記爲壞,甚至進一步更新了過去:

hg bisect --bad 
hg update -d '<May 1' 

重複此操作,直到找到一個良好的修訂。當你找到一個很好的修訂版時,Mercurial可以開始幫助你:好的和不好的更改集之間的變更集必須包含錯誤。 Mercurial將通過跟蹤候選變更集列表來幫助您,並幫助您將列表縮小到單個變更集。它通過將您更新爲大致位於候選人中間的變更集並要求您測試此變更集來實現此目的。

經過測試,您將變更集標記爲好或不好。如果你把它標記爲好,那麼你知道這個錯誤在將來會更進一步,如果你把它標記爲壞,那麼這個錯誤就會在過去進一步發展。在任何一種情況下,您都會在每個步驟中削減約半數候選人!這意味着您只需要10個步驟來測試1024個候選人 - 這就是對數的力量:-) Mercurial會跟蹤候選人並在每次測試後將您更新到新的位置。

一個完整的會話可能看起來像這樣(我只是說好/壞隨機這裏):

 
% hg bisect --reset 
% hg bisect --bad 
% hg update -r -100 
61 files updated, 0 files merged, 9 files removed, 0 files unresolved 
% hg bisect --good 
Testing changeset 11414:0fa4474bdc2f (99 changesets remaining, ~6 tests) 
46 files updated, 0 files merged, 0 files removed, 0 files unresolved 
% hg bisect --good 
Testing changeset 11439:778377be3662 (50 changesets remaining, ~5 tests) 
17 files updated, 0 files merged, 0 files removed, 0 files unresolved 
% hg bisect --bad 
Testing changeset 11428:4d03c3680400 (25 changesets remaining, ~4 tests) 
6 files updated, 0 files merged, 0 files removed, 0 files unresolved 
% hg bisect --bad 
Testing changeset 11420:a99ef3711890 (13 changesets remaining, ~3 tests) 
3 files updated, 0 files merged, 0 files removed, 0 files unresolved 
% hg bisect --bad 
Testing changeset 11417:6f1d1ed3e19a (6 changesets remaining, ~2 tests) 
4 files updated, 0 files merged, 0 files removed, 0 files unresolved 
% hg bisect --good 
Testing changeset 11418:67bb9d78f05e (3 changesets remaining, ~1 tests) 
1 files updated, 0 files merged, 0 files removed, 0 files unresolved 
% hg bisect --bad 
The first bad revision is: 
changeset: 11418:67bb9d78f05e 
user:  Matt Mackall 
date:  Mon Jun 21 13:25:42 2010 -0500 
summary:  merge: sort arguments to stabilize the ancestor search 
0

我會通過剩餘的變化集使用

hg pull -r <revision> [<original repo>] 

一些文檔here迭代。

+0

這工作得很好。現在,如果我想退步,我該怎麼辦? – 2010-07-01 06:44:24

+0

看起來像我可以「更新」修改向前和向後。 – 2010-07-01 07:03:17

0

要找到功能缺失的版本,您可以嘗試hg bisect。 你可以找到它here

tip回購協議中的最新版本,default分支的名稱,默認情況下在您創建回購協議時使用。您可以通過拉動它們來添加剩餘的變更集(變更)。

hg help pull