2013-05-30 32 views
0

我正在處理幾個PHP項目。一個是應用程序,另一個是支持該應用程序的庫。以前,我使用過一個mercurial setup,其中庫是應用程序庫中的子庫。這意味着對庫代碼的任何更改都被提交給子庫,並可以單獨與庫項目合併(以便將庫代碼的歷史與應用程序分開)。Bzr庫的子庫

我一直在努力尋找關於如何與Bazaar(我目前選擇的DVCS)做到這一點的例子或文檔。有沒有人試過/做過嗎?是否值得在Bzr做,或者我應該看看不同的DVCS系統以更好地滿足這種需求?

+0

更新:它看起來像在Bzr中有一個名爲「嵌套樹」的概念,但據我所知,它尚未完成實現(請參閱http://doc.bazaar.canonical.com/開發者/嵌套trees.html)。 希望有人糾正我(或者推薦Mercurial或Git更好地處理此用例)! –

回答

1

Bazaar沒有subrepository特性。 [更正:顯然有一個bzr-externals插件,可用於lp:bzr-externals,雖然它模擬svn:externals特性,而不是Git子模塊或Mercurial subrepos。]

但是,這可以相當容易地解決if你不想切換版本控制系統。

將應用程序和庫放在兩個目錄中,比如applib(我假設它們是並排的,儘管它們不需要)。下面的兩個腳本,lib-snapshotlib-sync然後可以將應用程序的當前版本鏈接到庫的特定版本,這將在子目錄(也稱爲lib)的app結賬的簽出:

LIB-快照:

#!/bin/sh 
libsrc=../lib 
bzr revno --tree $libsrc >libversion.txt 

LIB-同步:

#!/bin/sh 
ver=`cat libversion.txt` 
libsrc=../lib 
libdst=lib 
test -d $libdst/.bzr && bzr update -q -r $ver $libdst || bzr checkout -q --lightweight -r $ver $libsrc $libdst 

庫的當前版本存儲在libversion.txt,你需要把下版本控制(以便每個版本的應用程序同步到您測試的版本)。

lib-snapshot腳本將獲取當前檢出的庫的版本並將其存儲在libversion.txt中。只要您認爲庫足夠穩定並且希望應用程序使用新版本,就可以使用它。然後可以使用lib-sync腳本更新庫子目錄以包含快照版本;理想情況下,該腳本也應該用作構建/部署過程的一部分。

Bazaar會在添加文件時自動跳過包含存儲庫的目錄,但是您可能仍想將庫子目錄添加到.bzrignore,以免受到煩人的警告。