2011-09-19 173 views
1

我有多個模塊,每個模塊都在其自己的存儲庫中。 然後有一個框架,它有一些基本的代碼,這對所有的客戶端都是通用的,並且總是包含一些模塊的子集。在Mercurial中爲多個類似項目使用框架

在新客戶端上使用此設置的最佳方式是什麼?

我現在遇到的問題是: - 如果我克隆骨架,然後在骨架中添加一些內容並將其推送到服務器,骨架將得到更新。

如果我爲克隆骨架的客戶端每個項目都有一個存儲庫,則會發生同樣的情況:骨架中的更改被推送到框架。

現在,我可以通過克隆骨架,然後立即爲骨架中的客戶端創建一個新的分支來解決這個問題,但是我更喜歡它是否有自己的存儲庫以便傳遞到服務器,而不是分支的骨架(我想用於骨架版本,而不是項目)。

您有什麼建議?

+0

你想把它作爲一個起點,還是作爲保持不變的模塊/包? –

+0

骨架應該是新項目的基礎,所以是一個起點。在克隆骨架之前,開發人員應該在子庫(模塊)中進行更改,以便骨架總是up2date。將來,我們可能需要爲非向後兼容的事物分支骨架,但我們還沒有在那個階段。 –

+0

如果您可以避免更改零件,使用子庫會變得更容易,但是如果您需要更改零件的骨架,則會遇到問題。我仍然不完全瞭解你的問題的細節。 –

回答

1

如果我理解正確,缺少的信息是您可以在製作克隆後更改默認推送路徑。當您運行

$ hg clone http://hg.server/repos/skeleton client-a 

skeleton回購得到了client-a克隆,然後用水銀

[paths] 
default = http://hg.server/repos/skeleton 

創建client-a/.hg/hgrc所以hg push現在將發送變更到該存儲庫。而應該使服務器上一個新的克隆:

$ hg clone skeleton client-a 

,然後做出一個克隆你的機器上:然後

$ hg clone http://hg.server/repos/client-a 

更改框架代碼將不再自動傳播到skeleton服務器上的回購。

這方面的一個重要的下側是,所有的客戶端庫將是「兼容」這意味着你可以通過事故做到這一點:

$ cd client-a 
$ hg pull http://hg.server/repos/client-b 

這工作,因爲client-aclient-b有着共同的祖先skeleton存儲庫。出於這個原因,我會簡單地複製框架文件並將它們重新到每個客戶端庫:

$ unzip skeleton.zip 
$ rm skeleton.zip 
$ hg add 
$ hg commit -m "Initialized repository for client-a" 

由於日期和提交信息會有所不同爲每個客戶端,該庫將成爲無關hg push和如果您嘗試混合來自不同客戶端的變更集,則hg pull將會出錯。

相關問題