2012-07-11 82 views
7
  1. 我有根Mercurial回購(網站)。
  2. 我從GitHub mirror克隆WordPress到/wp子目錄。
  3. 因爲我想WP的非常具體(穩定)版本,但沒有正在進行的開發,我做git checkout 3.4.1(其中3.4.1是標籤)。
  4. 我將它設置爲根Mercurial回購和提交(WP版本被捕獲罰款.hgsubstate罰款)subrepo。

這裏麻煩開始了。我做hg push並且當它到達WP:如何修復Mercurial卡住Git subrepo推?

no branch checked out in subrepo wp 
cannot push revision e9bc63e25dc40c07ac3a6778dc2b48e1aa486e36 

然後它就退出。推動根回購甚至沒有嘗試。

我明白爲什麼水銀嘗試推subrepo(預期的行爲),但我沒有意義,爲什麼它管理上subrepo完全失敗:

  1. 沒有變化
  2. 已經閱讀 - 只原產反正

如何使它明白,我想要這個特定的修訂版本,我不希望它使用Git subrepo搞亂?

回答

2

你會碰到這個設置的幾個問題。

首先,似乎mercurial不能處理git subrepos與分離HEAD

當您執行git checkout 3.4.1時,您的回購進入detached HEAD狀態(執行命令時應該看到這種效果的警告)。此時,如果運行git branch,您會看到(no branch)被列爲活動分支。當mercurial試圖推動時,它就窒息了這個狀態。您可以詢問mercurial developer list爲什麼會發生這種情況,但這可能是現有次級實施的限制。

二,mercurial使用push命令同步git subrepos

如果您要運行git checkout -b <integration_branch> 3.4.1,它會將git移出分離的HEAD狀態。但是,當您嘗試hg push時,它將嘗試實際推送到遠程git倉庫。對於mercurial subrepo,即使您沒有對遙控器的推送訪問權,它也可以檢查傳出的更改。但是,GitHub要求您在進行身份驗證之前會告訴您兩個回購是否同步。所以,如果你沒有對git remote的push訪問權,那麼這將會失敗。這是mercurial subrepo戰略設計的一部分。

如果需要繼續使用此設置,你應該做到以下幾點:

  1. 創建您自己在GitHub上的WordPress回購的叉。
  2. 將你的fork克隆到mercurial subrepo目錄中。
  3. git checkout -b <branch_name> 3.4.1
  4. 從那裏

繼續有這related question一些額外的信息。

+0

是的,它似乎分離頭是這裏的問題(雖然我看到它作爲Git的缺點不Mercurial - 如果它沒有任何推動什麼活躍的分支事情?)。你的第二點似乎不是問題,但其他GitHub subrepos更新,以修正工作正常。我目前的解決方案是創建和使用WordPress的Mercurial鏡像,但仍然有興趣,如果這種分離的東西可以作爲subrepo沒有克隆和分支的東西...... – Rarst 2012-07-13 15:16:25

+0

@Rarst:只要你的其他GitHub subrepos指向'提示',它會沒事的。但是,只要您創建本地git分支以使用較早版本(例如,使用較舊的標籤,而沒有分離的HEAD),您將會得到相同的錯誤。 – 2012-07-13 15:31:34