Update:看起来OpenERP项目的官方文档现在有提出合并建议的指南。我也会在这里留下我的版本,因为它有一些不同的细节。
在使用 Bazaar 和 Launchpad 几天并提交了一些补丁和合并提案之后,我想我应该写一个我的发现的摘要。 Launchpad 和 Bazaar 提供了一些强大的工具,特别是对于社区驱动的项目,但我认为新用户不太可能掉进成功的深渊然而。有多种方法可以使该过程变得缓慢且令人沮丧,因此我希望本演练可以帮助一些人避免一些错误。
以下是我学到的用于修复错误并向团队提交合并提案(针对 Launchpad 上托管的项目)的工作流程。我正在 GNU/Linux 工作站上工作,但我认为 Bazaar 命令在其他平台上是等效的。在此示例中,我正在处理 OpenObject 项目组中名为 OpenObject Addons 的项目之一。维护者的用户名是openerp。我将把我的工作区放在~/workspace
folder.
如果您想了解有关此处任何命令的更多信息,请使用bzr help
加上命令名称。
创建共享存储库
因为我将为每个想要回馈项目的功能创建一个分支,所以我不想为每个分支拥有项目整个历史记录的单独副本。为了避免这种情况,我创建了一个共享存储库,然后在其中创建每个分支。需要注意的一件事是,您的存储库格式必须与官方分支的格式相匹配,以使后续的一些步骤起作用。
检查官方分支上的存储库格式:
bzr info http://bazaar.launchpad.net/~openerp/openobject-addons/5.0
获取代码
现在创建一个工作区文件夹,用于保存计算机上的所有本地分支 - 我只是以项目命名它。然后使用您在官方分支上找到的格式在其中创建一个共享存储库。
cd ~
mkdir workspace
cd workspace
mkdir openobject-addons
cd openobject-addons
bzr init-repo --format=rich-root-pack .
下一步是从官方分支查看源代码。它通常称为主干,但您可能更喜欢使用仅用于错误修复的稳定版本分支。在此示例中,我将在 5.0 发行版分支上工作。
cd ~/workspace/openobject-addons
bzr checkout lp:~openerp/openobject-addons/5.0/ feature-x
对于大型项目来说,该步骤可能是整个过程中最慢的,因为您要将整个项目的所有代码以及所有历史记录复制到硬盘上。请注意,我以我要处理的功能来命名该分支。
创建分支
此时,您可以尝试在本地工作站上构建和运行代码。您可以对代码进行更改,但您还没有任何地方可以提交它们,因为您可能不允许直接提交到官方分支。要发布代码更改,您需要创建一个公共分支。如果您是 Launchpad 新手,则需要创建帐户并注册公钥 first.
设置帐户后,您可以将自己的分支发布为官方分支的副本,并开始使用它。这lp-login
命令告诉 bazaar 在启动板站点上使用什么帐户名,以及whoami
命令告诉 bazaar 在您提交的每个修订版上使用什么名称。您使用的电子邮件地址whoami
应与您为 Launchpad 帐户配置的电子邮件地址之一相匹配。
cd ~/workspace/openobject-addons/feature-x
bzr lp-login donkirkby
bzr whoami "Don Kirkby <[email protected]>"
bzr branch --stacked --switch lp:~openerp/openobject-addons/5.0/ lp:~donkirkby/openobject-addons/feature-x
您切换到新分支,以便提交将记录在您的本地历史记录和公共分支中。您可能想了解结帐和分支之间的区别。使其成为堆叠分支意味着创建速度非常快,因为它只包含官方分支中没有的历史记录。这篇博文听起来公共项目的分支应该默认为堆叠,但这对我来说不起作用。请注意,我以我想要添加的某些功能来命名该分支。作为拜利克斯建议,我为每个功能创建一个单独的分支,我最终将建议将其合并回官方分支。
提交并提出合并提案
现在您已经有了一个分支,您可以进行代码更改并提交它们。
cd ~/workspace/openobject-addons/feature-x
bzr commit -m "Fixed bug lp:12345 by fleaking the woverbinate() function."
您可以从分支结构中的任何位置提交,并且默认情况下会提交整个分支。跑步bzr help commit
了解详情。您可能还会发现bzr status
and bzr diff
useful.
一旦您对更改感到满意并将所有内容提交到功能分支,您就可以访问 Launchpad 网站并创建合并提案。这是一个方便的快捷方式,您可以运行它来启动分支的网页:
cd ~/workspace/openobject-addons/feature-x
bzr lp-open
创建合并提案后,Launchpad 将为其生成差异。非常值得回顾一下这个差异。有时我选择了错误的分支作为目标,我只是注意到差异的变化比我预期的要多。还有一个bzr send
用于合并建议的命令,但我还没有使用它。
有一个电子邮件接口来引导您的提案完成整个过程,或者您也可以只使用该网站。
将分支附加到错误也很有用,以便其他人可以像在自己的系统上使用补丁一样使用它。
持续变化
如果您开发多个功能,并且维护者审核您的提案的速度不是很快,那么可能值得建立自己的主线分支。该分支将您的所有功能收集在一起,并保存您将在服务器上运行的代码。如果官方分支不是很稳定并且您想要稳定生产环境的分支,那么它也很有用。然后,您可以决定何时升级到最新版本,以及何时针对损害用户的错误采取特定补丁。
第一步是创建另一个堆叠在官方分支上的分支:
cd ~/workspace/openobject-addons
bzr checkout lp:~openerp/openobject-addons/5.0/ main
cd main
bzr branch --stacked --switch lp:~openerp/openobject-addons/5.0/ lp:~donkirkby/openobject-addons/main
现在您需要合并两个更改源。首先,从功能或错误修复分支合并:
cd ~/workspace/openobject-addons/main
bzr merge lp:~donkirkby/openobject-addons/feature-x/
bzr commit -m "Merged feature x"
当然,如果您仍然有功能分支的本地副本,则进行本地合并会更快:
cd ~/workspace/openobject-addons/main
bzr merge ../feature-x
bzr commit -m "Merged feature x"
其次,您偶尔会想要合并官方分支中的最新和最好的内容:
cd ~/workspace/openobject-addons/main
bzr merge --remember lp:~openerp/openobject-addons/5.0/
bzr commit -m "Merged from 5.0 branch"
使用后--remember
当你从官方分支合并时,你可以使用bzr merge
自己从官方分支合并。如果项目使用标签来标记发布点,您可以查看标签列表并从标签进行合并。
cd ~/workspace/openobject-addons/main
bzr tags -d lp:~openerp/openobject-addons/5.0/
bzr merge -r tag:5.0.7rc2