如果庫B和C必須 子目錄A項目做什麼,如果我要開始一個項目d是 使用圖書館B I 做,但不以其他方式 與項目A在所有下屬?
任何項目都可以存在兩種獨立和如在同一時間的另一項目的subrepository。我會通過建議工作流程來解釋。
首先,每個項目(A,B,C)中必須存在某處發表了祝福庫:
你可以在自己的服務器上運行hgwebdir,或使用的Mercurial託管服務,如Bitbucket或Kiln。通過這種方式,開發人員擁有一箇中心授權點來提取/推送更改,並且您可以進行備份。
現在你可以讓這些存儲庫的克隆兩種不同的方式上工作:
直接克隆項目。例如:
hg clone http://bitbucket.org/LachlanG/LibraryB C:\Lib\LibraryB
和/或通過把一個.hgsub
文件中的ProjectA
根與以下內容創建subrepository定義:
libraries/libraryB = http://bitbucket.org/LachlanG/LibraryB
libraries/libraryC = http://bitbucket.org/LachlanG/LibraryC
這些subrepository定義告訴水銀說每當項目A被克隆時,它也必須將庫B和庫C的克隆放入libraries
文件夾中。
如果您在項目A中工作並提交,那麼您的更改將在libraries/LibraryB
和libraries/LibraryC
之間進行。 Mercurial將記錄項目A在.hgsubstate
文件中正在使用哪個版本的庫。結果是,如果你在hg update
的舊版本的項目上看到了上週的工作情況,那麼你也可以得到相應版本的庫。您甚至不需要製作標籤:-)
當您將hg push
項目A更改爲有福的存儲庫時,Mercurial還會確保將子備份更改首先推送到其原始位置。這樣您就不會意外發布取決於未發佈的庫更改的項目更改。
如果您希望將所有內容保留在本地,則仍然可以通過使用相對路徑而不是子版本庫定義中的URL來使用此工作流程。
您在末尾提到的庫文件夾在哪裏,「這些子庫定義告訴mercurial,無論projectA被克隆,它還必須將LibraryB和LibraryC的克隆放入庫文件夾中。」 – LachlanG 2010-12-16 11:44:51
它只是一個文件夾,左邊的部分是:libraries/libraryB = http://bitbucket.org/LachlanG/LibraryB是右邊的克隆應該是 – 2010-12-16 13:57:45
@LachlanG:它會出現在ProjectA的根目錄克隆,例如'C:\ Dev \ ProjectA \ libraries \'。 – 2010-12-16 16:11:29