在多个节点之间自动同步 Bazaar 存储库的工具
项目描述
BzrSync 是一个帮助开发人员在多台机器上使用 Bazaar 的工具。它会自动使选定的存储库和分支在机器之间保持同步。Bazaar 本身用于同步(使用“bzr pull”),确保始终保持一致性。
特征
支持任意数量的机器
始终保证一致性
安装
要安装 BzrSync 的最新稳定版本,请使用pip:
pip install bzrsync
或使用setuptools:
easy_install bzrsync
否则,如果pip和setuptools都不可用,则可以下载(例如从PyPI)源包,解压缩并运行通常的setup.py命令:
python setup.py install
用法
假设您在三个不同的工作站工作,它们的主机名是alpha、beta和gamma。您希望使用 BzrSync 在所有三个节点之间保持 Bazaar 存储库和分支同步。BzrSync 旨在与共享存储库一起使用,因此如果您不使用这些,则应重新组织您的分支以使用共享存储库。将所有存储库保存在同一目录中更容易。在我们的示例中,我们的存储库将驻留在 ~/bzr 中,它们的名称将以“.bzr”结尾。在每个共享存储库中,在顶层应该有每个节点的目录。在我们的例子中alpha,beta和gamma. 例如,假设我们有一个名为“project-foo.bzr”的存储库。我们正在开发alpha,并创建了一个主干和一个feature-1分支。我们会有:
~/bzr/project-foo.bzr/ ~/bzr/project-foo.bzr/alpha ~/bzr/project-foo.bzr/alpha/trunk ~/bzr/project-foo.bzr/alpha/feature-1 ~/bzr/project-foo.bzr/beta ~/bzr/project-foo.bzr/gamma
假设我们还有一个local.bzr存储库,我们不想在任一方向同步。
BzrSync 需要一个 YAML 配置文件,默认为 ~/.bazaar/bzrsync.yaml,列出我们的存储库和分支。在此示例中,其内容将是:
# remote nodes # (a host can be specified with an optional port as HOST:PORT) hosts: - alpha - beta - gamma # where repositories specified with a relative path/pattern are located root: ~/bzr # *all* repositories repositories: "*.bzr" # specific repositories to exclude from 'repositories' exclude: - local.bzr # repositories to export to remote nodes export: "*.bzr" # specific repositories excluded from export export_exclude: - local.bzr # repositories to sync from remotes sync: "*.bzr" # specific repositories excluded from sync sync_exclude: - local.bzr
我们可以在所有三个节点上使用完全相同的配置文件。
BzrSync 不会为您创建共享存储库,因此在继续之前,现在在所有节点上执行此操作,记住还要创建节点子目录。
然后在所有节点上启动 BzrSync 守护进程:
alpha$ bzrsync serve beta$ bzrsync serve gamma$ bzrsync serve
现在让我们将 project-foo.bzr 从 alpha 同步到 beta:
beta$ bzrsync 同步 ~/bzr/project-foo.bzr
这将把 ~/bzr/project-foo.bzr/alpha/ 上的所有分支拉到beta上 ,并将所有分支从~/bzr/project-foo.bzr/gamma/ 上拉到gamma上。在我们的例子中,现在只有 alpha 有分支,所以在实践中我们会得到分支alpha/trunk和alpha/feature-1从alpha到 beta,保持它们为alpha/trunk和alpha/feature-1。
如果你想在beta上工作,现在从新同步的分支分支到beta/子目录中的对应分支:
beta$ bzr branch ~/bzr/project-foo.bzr/alpha/feature-1 ~/bzr/project-foo.bzr/beta/feature-1 beta$ bzr co ~/bzr/project-foo.bzr/beta/feature-1 foo-feature-1 beta$ cd foo-feature-1 ... hack hack hack ... beta$ commit
现在在测试版中,我们将拥有:
~/bzr/project-foo.bzr/ ~/bzr/project-foo.bzr/alpha ~/bzr/project-foo.bzr/alpha/trunk ~/bzr/project-foo.bzr/alpha/feature-1 ~/bzr/project-foo.bzr/beta ~/bzr/project-foo.bzr/beta/feature-1 ~/bzr/project-foo.bzr/gamma
完成测试版工作后,您可以从 alpha 版同步:
alpha$ bzrsync 同步 ~/bzr/project-foo.bzr
这也将在alpha上创建beta/feature-1 ,如果没有分歧,您可以将其拉到alpha/feature-1上,否则将其合并,然后再次从alpha开始工作。
请参阅示例bzrsync.yaml文件以获得更完整的示例,其中还包括分支集。
帮助与发展
或者,如果您想偶尔更新软件以在发布正式版本之前获取最新的错误修复和增强功能,请改为从LaunchPad上托管的Bazaar存储库分支 。只需按照以下概述的程序进行操作:
确保您已安装Bazaar,并且您可以从 shell 运行它的命令。(在 shell 提示符下输入bzr help来测试它。)
从官方创建一个本地分支和工作树:
bzr branch lp:bzrsync bzrsync
然后,您可以从bzrsync目录运行setup.py develop 命令,使用链接将库安装到 Python站点包目录中,这允许在工作树中继续开发,而无需在每次更改后重新安装。有关详细信息,请参阅 setuptools 开发模式文档:
$ sudo # python setup.py develop
执照
该软件受 GNU 通用公共许可证第 2 版的保护。它是:
版权所有 (C) 2010-2011 Marco Pantaleoni。版权所有。
该程序是免费软件;您可以根据自由软件基金会发布的 GNU 通用公共许可证第 2 版的条款重新分发和/或修改它。
分发此程序的目的是希望它有用,但不提供任何保证;甚至没有对适销性或特定用途适用性的默示保证。有关详细信息,请参阅 GNU 通用公共许可证。
您应该已经收到了一份 GNU 通用公共许可证的副本以及该程序;如果没有,请写信给 Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA。