2010-08-27 26 views
1

基本上,我想嘗試的是將實驗回購分支的hg修訂版拉入主線的克隆。但我想放棄分支名稱,所以我可以直接推入服務器端的主線庫。這也可能是最好舉個簡單的例子:在hg中,如何在重新綁定和/或從另一個repo移植時刪除分支名稱?

hg init hg_mainline 
pushd hg_mainline 
touch foo 
hg add foo 
hg commit -m 'foo' 
popd 
hg clone hg_mainline hg_experimental 
pushd hg_experimental 
hg branch bar_branch 
touch bar 
hg add bar 
hg commit -m 'bar' 
popd 
pushd hg_mainline 
hg pull ../hg_experimental 
hg log 

正如你所看到的,現在主線包括有REV「分支:bar_branch。」我不希望這個修訂版有一個分支(即它應該是默認的)。

如果這需要使用rebasetransplant或其他工具重寫歷史記錄,這是可以的。我已經嘗試了這兩種方法,但無法使其工作。兩次回購之間最新的修訂哈希結果可能不同。

所以我想hg_mainline的最高版本的樣子:

changeset: 1:xxxxxxxxxxxx 
tag:   tip 
user:  ... 
date:  ... 
summary:  ... 

沒有命名的分支。

再說一次,如果哈希不是從hg_experimental保存的,那也沒關係。

我目前使用Ubuntu PPA的hg 1.6.2 + 55-18e1e7520b67。

編輯:

我也用過1.3.1。我在兩者上都測試了下面的結果,這裏的結果是一樣的。

我得到它與移植工作,但只有與grep -v kludge。

hg transplant -s ../hg_experimental 1 --filter "grep -v '^branch:'" 

有了:

hg transplant -s ../hg_experimental 1 

汞出口也不能工作,有或沒有合適的grep。

的變更補丁的樣子:

# HG changeset patch 
# User Matthew Flaschen <EMAIL> 
# Date 1282942390 14400 
# Branch bar_branch 
# Node ID b8e36efea72642f0a0194301489d5c48f619a921 
# Parent 85d9b9773d4ec09676dfcc4af89c142c46279444 
bar 

我從實驗導出的:

hg export 1 -o '/tmp/%b_%H_%R' 

,並試圖導入一起主線:

hg import /tmp/hg_experimental_b8e36efea72642f0a0194301489d5c48f619a921_1 

它失敗:

abort: no diffs found 

編輯2:

如前所述,出口方法只因爲這些文件是空的失敗。它可以與--git或非空文件正常工作。

回答

3

最簡單的解決方案是使用hg export從實驗倉庫和hg import進入主倉庫。默認情況下,hg import不會在修補程序中應用任何分支信息。缺點是它們會在兩個回購站中顯示爲不同的變更集 - hg incoming在實驗回購站中將顯示您剛剛導出/導入的更改 - 因此,執行此操作後,最好刪除並重新創建實驗如果您打算做更多實驗,請回購。

編輯:從hg_mainline庫:

hg export -r 1 -R ../hg_experimental | hg import - 

EDIT2:從hg help diffs

用於顯示一個文件 的兩個版本之間的變化Mercurial的默認格式與GNU的統一格式兼容diff,它可以被GNU 補丁和許多其他標準工具使用。

雖然這種標準格式往往是不夠的,它不編碼以下信息:(中略)

  • 創建或刪除的空文件

測試文件是空的測試腳本,因此您需要在其中輸入內容,或使用hg export--git選項。

+0

移植只是一個包裝出口/進口與一個小重複檢測 – 2010-08-27 19:15:41

+0

我得到「中止:沒有差異發現」與hg 1.3.1或最近的汞。我在版本中導出和導入,爲了安全起見。 – 2010-08-27 21:24:11

+0

@Matthew:對不起,以前很匆忙。用適合你的命令更新我的答案。 – 2010-08-27 21:48:08

2

的移植擴展已經下腳料分支名稱:

cd hg_mainline 
hg transplant -s ../hg_experimental 1 

應該爲你做。如果您發現情況並非如此,您可以隨時使用--filter修改更改集(可能僅使用grep -v)。

我會注意到,如果您能想出一個避免移植的工作流程,保持哈希你更好。完全避免命名分支使得這更容易 - 匿名分支可能與書籤一起工作或更好。

+0

沒有''''選項。正如我所指出的,我嘗試了很多移植手段,但它始終保持分支(或者簡單地失敗)。 – 2010-08-27 19:27:10

+0

對不起,它不是'只是'1'。我剛剛做了一次移植,它扔掉了分支信息。你有啓用git風格差異(我不?)?你使用的是最新版本嗎? 1.6.3天和1.0.x(或0.9.6)和古代。 – 2010-08-27 20:26:37

+0

我用'grep'進行了移植工作。我聽說過hg書籤,但之前沒有完全琢磨過它。我已經開始關注他們,而且看起來很有前景。它肯定避免了命名分支問題。 – 2010-08-27 22:00:58

相關問題