2010-12-14 58 views
1

目前,我有2個存儲庫。一個存儲庫名爲jstock,其中包含所有穩定的源代碼。防止不穩定的代碼進入默認行

另一個名爲jstock-refactor-calendar-to-joda的存儲庫,它從jstock中克隆,它包含所有不穩定的實驗功能代碼。

紅色矩形中的所有變化集都是不穩定的實驗特徵代碼。他們還沒有完成。因此,我不打算使它與綠色矩形中的變更集合(綠色矩形表示那些是穩定變更集)

jstock-refactor-calendar-to-joda之後從jstock拉,這裏是它的樣子。 alt text

現在,我想,讓實驗代碼jstock可見的(但不是進入默認的行,因爲它們是不穩定的)

因此,當我從jstock-refactor-calendar-to-joda進行推jstock,這裏是什麼我明白了。 alt text

現在所有不穩定的代碼都屬於默認行!

這不是我想要的。在jstock中,我希望穩定代碼(綠色矩形)保持默認(左側),不穩定代碼(紅色矩形)保留在右側。請注意,我不希望它們被合併,但我希望可以看到兩條開發線(穩定和不穩定)。

我做錯了什麼步驟?

回答

2

在這種情況下,您必須在創建多個標題時推送「強制」。 兩個這些頭都在「默認」分支上。對此沒有任何問題,但是你擔心的問題是你的新頭(不穩定的代碼)是默認分支的「尖端」。

Mercurial FAQ

前端始終是一個頭。如果存儲庫中有多個頭,則只有 其中一個是提示。在 存儲庫中,變更集按順序編號爲 ,因此提示的最高序列號爲 。單詞 「提示」用作 表示提示變更集的特殊標記,它可以在變更集標識或標記 有效的任何位置使用 。

將這些更改推送到命名分支as Lasse suggests,但你是你所在的位置會更好。在這種情況下,您(或任何第一次拉該存儲庫的人)需要將工作副本更新爲默認分支的穩定部分。

hg update -r 12345 

(其中12345是的版本號「而不是限制貨幣的......」

對於已經擁有這個倉庫,當他們拉你的不穩定變化,他們將看到多個頭,但開發商自己工作副本不會自動更新到新的分支

+0

我意識到,當我升級到12345,和執行提交。穩定的行再次成爲默認值。謝謝。 – 2010-12-16 05:57:50

-1

在這種情況下,您可能應該等待推送,並使整個存儲庫可用。

或者,當你開始分支時,你應該給它一個名字。你可以有多個未命名的分支都屬於同一個命名分支。

換句話說,您看到的所有變更集都是default分支的一部分,但標籤僅顯示該分支的尖端。由於新的變更集現在成爲提示,因此標籤在用戶界面中顯示的位置就是這種情況。

如果您給了它一個名稱,默認分支上的最終變更集的默認值仍然會降低。

要解決這個問題,您必須逐一「重播」這些變更集。我不知道做到這一點的最佳方式,但足以說他們會得到新的哈希值,所以任何拉取這些變更集的人都有可能將其作爲默認分支的一部分推回來。

+0

可以追溯創建一個名爲分支,如http://stackoverflow.com/questions/2354941/retroactive-named-branching-in-mercurial描述 – 2012-10-26 04:25:42

3

這也貼在水銀郵件列表及以下my reply

兩個(匿名)分支的日誌六位置壺是不重要的:沒有左側或右側,順序只取決於你所做的拉和推的順序。

你需要的是一種方式標籤從穩定和不穩定分支的變化集,以便您可以跟蹤哪個是哪個。主要有三種方法可以做到這一點:

  • 獨立克隆:這是你已經用在你保持獨立克隆了不同的分支瑣碎的方式。

    它的優點是您只需刪除克隆即可輕鬆刪除更改集。

    它的缺點是,由於變更集保持獨立,因此您無法真正瞭解發生的情況。

  • 命名分支:在這裏看到我的嚮導,如果你還沒有這樣做:

    http://mercurial.aragost.com/kick-start/en/tasks/

    命名分支的好處是,他們把一個標籤爲每個變更,使你可以跟蹤他們來自哪裏。如果你有一個名爲分支稱爲「重構日曆到喬達」,那麼你就可以以更新的工作拷貝到分支的末端做

    hg update refactor-calendar-to-joda 
    

    。當在分支上進行新的提交時,分支提示會一直移動,因此您可以將'refactor-calendar-to-joda'視爲浮動標籤。

    要返回到默認的分支,執行

    hg update default 
    

    這是正常的發展應該發生。

    命名分支適用於長期穩定的分支,或者年名後也有意義的分支。例如,如果您使用錯誤跟蹤器,那麼我建議創建一個錯誤來跟蹤重構,然後調用分支的錯誤XX。這樣人們可以在未來查找正確的錯誤編號。

  • 書籤:書籤給名稱的變更和名爲分支機構,您可以更新到書籤:

    hg update refactor-calendar-to-joda 
    

    然而,與名爲分支機構,書籤生活的變更圖表之外。因爲它們本身不是變更集的一部分,所以書籤可以被移動,刪除,重命名等。您可以在儲存庫之間推送和拉取書籤。

因此,使用長期持久性名稱,使用書籤命名爲分支短暫的分支,並使用單獨的存儲庫,如果你喜歡的東西分開。

最後,請參閱本指南以獲得更多關於這個話題:

http://stevelosh.com/blog/2009/08/a-guide-to-branching-in-mercurial/

1

你所做的是完全正常的。你有兩個頭在同一個命名分支'默認'。這是一種完全正常的工作方式。這裏是正在發生的事情的一個相當不錯的描述:

http://stevelosh.com/blog/2009/08/a-guide-to-branching-in-mercurial/#branching-anonymously

尼克指出,當他們拉和人民誰新克隆會得到兩個誰已經有一個克隆人將獲得新的頭 - 而這只是罰款。

當人們hg update default或者只是hg update他們搬到了上default分支最新的變更,所以只是做一個多用「而非限制性的貨幣小數位......」變更爲其父這樣的承諾:

hg update REVSION 
...edit 
hg commit 

它們會在克隆/更新時自動更新到您想要的匿名分支。

需要記住的一點是,mercurial在命名分支之前已經存在了很長一段時間,所以您可以使用命名分支執行的所有操作都可以通過匿名分支完成。

如果您決定在回購倉庫中有兩個未區分的頭,請考慮給書籤看一看。它們是粘性標籤,用於跟蹤匿名分支的提示 - 比命名分支更靈活,因爲它們不是永久性的。

http://stevelosh.com/blog/2009/08/a-guide-to-branching-in-mercurial/#branching-with-bookmarks