我正在研究几个PHP项目。一个是应用程序,另一个是支持该应用程序的库。以前我使用过mercurial设置,其中库是应用程序库中的子库。这意味着对库代码的任何更改都已提交到子库,并且可以单独与库项目合并(以便将库代码的历史记录与应用程序分开)。
我一直在努力寻找有关如何使用Bazaar(我目前选择的DVCS)的例子或文档。有人试过/做过吗?是否值得在Bzr中做,或者我应该考虑更好地满足这种需求的不同DVCS系统?
答案 0 :(得分:1)
Bazaar没有子库存功能。 [更正:显然有一个bzr-externals插件,可以在lp:bzr-externals上找到,虽然它模仿svn:externals功能,而不是Git子模块或Mercurial subrepos。]
但是,如果您不想切换版本控制系统,这可以很容易地解决。
将应用程序和库放在两个目录中,比如app
和lib
(我在这里假设它们是并排的,尽管它们不是必须的)。然后可以使用以下两个脚本lib-snapshot
和lib-sync
将应用程序的当前版本链接到库的特定版本,该版本将在子目录中检出(也称为{{1 } {} 1} lib
结帐:
LIB快照:
app
LIB同步:
#!/bin/sh
libsrc=../lib
bzr revno --tree $libsrc >libversion.txt
库的当前版本存储在#!/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
脚本更新库子目录以包含快照版本;理想情况下,此脚本也应该用作构建/部署过程的一部分。
Bazaar会在添加文件时自动跳过包含存储库的目录,但您可能仍希望将库子目录添加到lib-sync
,这样您就不会收到恼人的警告。