2010-11-17 66 views
5

我有一個mercurial存儲庫,裏面有多個子存儲庫。存儲庫有一個Visual Studio解決方案,其中包含存儲庫和子庫中的項目。我可以將更改多個mercurial subrepos提交給新的命名分支嗎?

假設我想實現一個新功能,它需要修改存儲庫中的主項目,並在解決方案中更改其中的一個依賴項目(比方說,在依賴項中添加一個新的共享接口,以及一個實現在主項目中的接口)。

我想,然後提交更改,但新的命名的分支,因爲它是未完成的,將被後來合併英寸使用tortoiseHg我提交存儲庫中的更改,指定要創建的新分支。提交反過來提交sub repo的更改,但在我的測試中,它不會在其存儲庫中創建新分支,而只是將該更改集添加到當前分支。

我可以顯式執行對子倉庫的提交,並指定當時的分支名稱,但我希望有一種方法可以將整個存儲庫中的更改集提交到每個倉庫中的新分支,因此我的工作流程清潔器。這可能嗎?

回答

6

首先提交sub-repo並在那裏創建一個命名分支。

之後的主要承諾應該像以前一樣繼續致力於該子回購在同一分支。

首先,您應該將兩個存儲庫視爲單獨的,完全分開的。換句話說,你在一個倉庫中做了一些事情並提交。然後你在另一個倉庫中做一些事情,並做出承諾。

的關係,兩個儲存有是主存儲庫存儲文件時,.hgsubstate文件,它包含每個子庫的工作文件夾的父的哈希值。

換句話說,子庫,這本身並不知道它是一個更大的圖景的一部分。但是,主存儲庫知道該子存儲庫中當前檢出的修訂。這些知識作爲正常提交的一部分存入存儲庫。

這意味着,如果你在子庫做的事,犯的是,子庫正處於一個新的修訂。當您稍後在主存儲庫中提交時,子版本庫中該新版本的哈希將更新到.hgsubstate文件中,然後進行提交。

這樣做的目的當然是,如果您更新到主存儲庫中較早的版本,那麼.hgsubstate文件的舊副本也會被帶入工作文件夾,然後更新子存儲庫到那個版本,這個版本的作用是將時鐘轉回到子版本庫在修改版本時的樣子。

此外,主存儲庫上的命令有時也在子存儲庫上工作。如果您推入主存儲庫,則也會推送子存儲庫,以確保克隆主存儲庫的其他人也可以安全地依靠能夠克隆子存儲庫的適當內容。

所以要在評論中回答你的問題。

如果您創建的子庫的一個分支,命名或以其他方式,你能不能讓犯下新的變更下一個分支。在某些時候,您需要合併,並且需要在子存儲庫以及主存儲庫中進行合併。

首先你要在子庫中合併。這以提交結束,這意味着子存儲庫現在位於提交合並的變更集。然後你在主存儲庫中進行合併,並提交,它存儲了這些知識,現在正在使用的子存儲庫中的變化集。

所以,是的,你需要在以後兩者合併。

+0

謝謝。我假設合併變更的情況也是如此? – 2010-11-17 14:00:49

+0

讓我用更多的信息編輯我的答案。 – 2010-11-17 14:05:46

相關問題