我正在处理几个PHP项目。一个是应用程序,另一个是支持该应用程序的库。以前,我使用过一个mercurial setup,其中库是应用程序库中的子库。这意味着对库代码的任何更改都被提交给子库,并可以单独与库项目合并(以便将库代码的历史与应用程序分开)。Bzr库的子库
我一直在努力寻找关于如何与Bazaar(我目前选择的DVCS)做到这一点的例子或文档。有没有人试过/做过吗?是否值得在Bzr做,或者我应该看看不同的DVCS系统以更好地满足这种需求?
我正在处理几个PHP项目。一个是应用程序,另一个是支持该应用程序的库。以前,我使用过一个mercurial setup,其中库是应用程序库中的子库。这意味着对库代码的任何更改都被提交给子库,并可以单独与库项目合并(以便将库代码的历史与应用程序分开)。Bzr库的子库
我一直在努力寻找关于如何与Bazaar(我目前选择的DVCS)做到这一点的例子或文档。有没有人试过/做过吗?是否值得在Bzr做,或者我应该看看不同的DVCS系统以更好地满足这种需求?
Bazaar没有subrepository特性。 [更正:显然有一个bzr-externals插件,可用于lp:bzr-externals,虽然它模拟svn:externals特性,而不是Git子模块或Mercurial subrepos。]
但是,这可以相当容易地解决if你不想切换版本控制系统。
将应用程序和库放在两个目录中,比如app
和lib
(我假设它们是并排的,尽管它们不需要)。下面的两个脚本,lib-snapshot
和lib-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
,以免受到烦人的警告。
更新:它看起来像在Bzr中有一个名为“嵌套树”的概念,但据我所知,它尚未完成实现(请参阅http://doc.bazaar.canonical.com/开发者/嵌套trees.html)。 希望有人纠正我(或者推荐Mercurial或Git更好地处理此用例)! –