2013-05-30 33 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,以免受到烦人的警告。