Bzr库的子库

时间:2013-05-30 21:44:46

标签: dvcs bazaar subrepos

我正在研究几个PHP项目。一个是应用程序,另一个是支持该应用程序的库。以前我使用过mercurial设置,其中库是应用程序库中的子库。这意味着对库代码的任何更改都已提交到子库,并且可以单独与库项目合并(以便将库代码的历史记录与应用程序分开)。

我一直在努力寻找有关如何使用Bazaar(我目前选择的DVCS)的例子或文档。有人试过/做过吗?是否值得在Bzr中做,或者我应该考虑更好地满足这种需求的不同DVCS系统?

1 个答案:

答案 0 :(得分:1)

Bazaar没有子库存功能。 [更正:显然有一个bzr-externals插件,可以在lp:bzr-externals上找到,虽然它模仿svn:externals功能,而不是Git子模块或Mercurial subrepos。]

但是,如果您不想切换版本控制系统,这可以很容易地解决。

将应用程序和库放在两个目录中,比如applib(我在这里假设它们是并排的,尽管它们不是必须的)。然后可以使用以下两个脚本lib-snapshotlib-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,这样您就不会收到恼人的警告。