2010-10-30 57 views
16

我一直在嘗試使用在github上託管項目依賴項的bitbucket來設置一個項目。使用Hg-Git Mercurial插件,我幾乎能夠到達那裏。添加一個Git subrepository到Mercurial

但是,當推動時,事情變得麻煩。

的文檔Mercurial subrepositories狀態:

2.4推送

水銀會自動嘗試首先按當前存儲庫的所有subrepos當你推。這將確保subrepos中的新變更集在頂級存儲庫引用時可用。

但是,這會導致一個大問題,因爲我不想要把所有的subrepositories(爲什麼要我?) - 我只看過對它們的訪問,這樣github上不會允許它。只有主存儲庫需要被推送到遠程服務器,但我不知道如何去做。無論是否有變化,hg都想要控制並推送所有子庫。有沒有辦法繞過這個功能

唯一需要推送的東西是.hgsub.hgsubstate。一旦通過其他路徑推送它們(更新到不存在子庫的變更集),就可以更新並從遠程存儲庫中提取更改,但是如果我在變更集整個考驗都會重演。

回答

4

這是不可能的,因爲推Mercurial的方法是什麼。這是一個由設計錯誤。

最好的解決方案是更新到以前的版本,其中子存儲庫不存在,然後推送。這將繞過Mercurial的限制並上傳必需的.hgsub.hgsubstate文件。這有點不方便,但這是我迄今發現的讓Mercurial和Git相互協作的最佳方式。

也許將來Hg-Git會自動更新以處理這個用例。

+0

這是一個錯誤,表明當使用github,hg-git和子庫功能時,嘗試使用本機git subrepository – 2012-08-25 14:24:06

0

如果您在子庫中沒有外出的變更集,那麼除了從遠程存儲庫中檢索最新的變更集列表外,「推送」實際上應該什麼都不做。因此,推動的實際「推動​​」部分將不會發生。我已成功使用只讀BitBucket存儲庫作爲子模塊。

+0

是的,它的確如此 - 但是推送確實發生了,只是如果沒有改變,那麼什麼都不會上傳。 Github會在檢查是否有任何變化之前強制您驗證自己的身份。所以爲了這個工作,推動需要被完全忽略。 – summatix 2010-10-30 17:48:03

1

我想你應該使用多個存儲庫; DVCS的效果更好。

例如,使一個存儲庫包含來自github的依賴關係。你只需拉回該回購就可以獲得所需的變更,你永遠不會推。 然後你有另一個項目庫,用於開發。在這裏,你可以自由地做任何你想做的事情。然後你鏈接到你自己的hg repo以獲得依賴關係。

,如果我理解正確的問題,你正在試圖做:)

+1

對不起,我不明白。我的問題是我需要Mercurial和Git很好地與對方玩 - 他們是這麼做的。但是,所謂的功能只會讓事情變得有點麻煩。 – summatix 2010-10-30 22:00:25

+0

這不是一個「所謂的功能」,這是使用hg的重要步驟。推/拉將您的本地存儲庫與遠程存儲庫同步。我所建議的是,您可能需要一個不同的存儲庫配置來完成您要做的事情;使用git/mercurial爲您的項目提供多個存儲庫時很常見。推動你的mercurial回購不應該影響你想從github獲得的東西,當然你不應該推入github回購。 – 2010-10-30 23:11:58

+1

我們很清楚這裏有不同的比賽場地 – summatix 2010-10-30 23:58:36

11

爲了將來的參考,mercurial的開發分支(以及即將發佈的1.8版本)現在支持native git subrepos。這種特殊情況非常好地實現,如果其遠程存儲庫不知道具有當前提交,則從根存儲庫推送只會告訴git子推送。

+0

這裏是一些細節的本地支持git subrepo的裏面mecurial http://mercurial.selenic.com/wiki/Subrepository#Git_subrepositories – 2011-07-13 15:38:37

相關問題