我正在处理几个 PHP 项目。一个是应用程序,另一个是支持该应用程序的库。以前我使用了一个 mercurial 设置,其中库是应用程序存储库中的一个子存储库。这意味着对库代码的任何更改都会提交到子存储库,并且可以单独与库项目合并(以便将库代码的历史与应用程序分开)。
我一直在努力寻找有关如何使用 Bazaar 执行此操作的示例或文档(我目前选择的 DVCS)。有人试过/做过吗?在 Bzr 中是否值得做,或者我应该看看一个更好地满足这个需求的不同的 DVCS 系统?
Bazaar 没有子存储库功能。[更正:显然有一个 bzr-externals 插件,可在 lp:bzr-externals 获得,尽管它模拟 svn:externals 功能,而不是 Git 子模块或 Mercurial 子存储库。]
但是,如果您不想切换版本控制系统,这很容易解决。
将应用程序和库放在两个目录中,比如说app
和lib
(我在这里假设它们是并排的,尽管它们不必如此)。以下两个脚本,lib-snapshot
然后lib-sync
可用于将应用程序的当前版本链接到库的特定版本,该库将在 checkout 的子目录(也称为lib
)中app
检出:
库快照:
#!/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
. 只要您认为该库足够稳定以至于您希望您的应用程序使用新版本,就可以使用它。lib-sync
然后可以使用该脚本更新库子目录以包含快照版本;理想情况下,该脚本也应该用作构建/部署过程的一部分。
Bazaar 在添加文件时会自动跳过包含存储库的目录,但您可能仍希望将库子目录添加到.bzrignore
其中,以免收到烦人的警告。