0

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

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

4

1 回答 1

1

Bazaar 没有子存储库功能。[更正:显然有一个 bzr-externals 插件,可在 lp:bzr-externals 获得,尽管它模拟 svn:externals 功能,而不是 Git 子模块或 Mercurial 子存​​储库。]

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

将应用程序和库放在两个目录中,比如说applib(我在这里假设它们是并排的,尽管它们不必如此)。以下两个脚本,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其中,以免收到烦人的警告。

于 2013-05-30T23:19:32.977 回答