我有一個使用相當標準的源碼樹方法+ mercurial subrepositories的主項目。現在Mercurial子庫 - 管理更復雜的依賴關係層次結構
Master
\lib - compiled binaries - things like log4net, AutoFac, etc
\source - VS solution, one folder per project, etc
\tools - stuff used during the build process
\source\contrib - contains any subrepos like so:
\source\contrib\Sub1
\source\contrib\Sub2
Master\.hgsub contains something like
source\contrib\Sub1 = https://myserver.com/Sub1
,最近確定了分公司2需要從Sub1的一些代碼,所以我必須要對此進行調節新的依賴結構。
問題當然是,如果我按照上面的方法,並添加Sub1作爲Sub2的subrepos,我結束了這種醜陋的情況。
\source\contrib\Sub2\source\contrib\Sub1
現在主人有2個獨立副本Sub1!
所以我知道我應該在引用subrepos(=的RHS)時使用相對路徑 - 但這並不能幫助我理解這裏的場景。我不認爲有什麼辦法可以讓LHS生存之外的主存儲庫,我認爲是我真正需要在這裏。
我對如何解決這個問題有一些想法,但沒有一個與我合適,並且我認爲必須有更好的方法。我的理想解決方案允許我在多個項目中共享相同的子回購,而不用支付多份副本的處罰。這似乎只是低效浪費在我這裏的情況(加,我想有一個對Sub1的依賴所有項目都使用相同的汞修訂,而不是獨立revisioned)
刪除Sub1的作爲Master的subrepos,並更改主解決方案中的任何相對路徑以引用雙重嵌套的Sub1。這種路徑結構不僅可怕,而且如果將Sub3添加到對Sub1具有依賴性的主控中,我仍然有Sub1的兩個副本。
編譯Sub1的一個副本,並將其放在\ lib目錄中。 Sub1仍在經歷一些流失,我寧願針對源版本進行構建。我不想支付一直不斷拷貝新的二進制文件到源代碼樹的稅(並且膨脹樹)。
以某種方式打破Sub2對Sub1的依賴關係。基於存儲庫的體系結構,這可能不會發生。 Sub1包含一些非常通用的共享庫代碼。 Sub2包含兩個非常獨立的項目(客戶端SDK和服務器實現)所需的WCF服務契約/接口/類型。在這個時候,保持這些存儲庫是分開的是合理的。
也許我正在考慮這個錯誤...或者我不知道一些hg技巧。
任何幫助表示讚賞。
嗯,這不是一個完全可怕的解決方案,我想,我想只要我送花兒給人有相關的代碼,就可以解決這個問題,在「兄弟」類型的設置。當然,我最終還會在Mercurial中加入一個額外的存儲庫,以便將兄弟姐妹放在一起,但這可能是我必須做出的折衷。感謝這個想法 - 我沒有考慮過。 – 2011-01-25 00:34:20
雖然還沒有準備好將它標記爲答案 - 希望來自Selenic的某個人會用'最佳實踐'加以聲援; 0 – 2011-01-25 00:35:03