open-source - 通过补丁或合并提案在启动板上提交错误修复?

标签 open-source patch bazaar

我是LaunchpadBazaar的新手,我试图弄清楚提交bug修复的最佳方法是什么。我正在使用一些在Launchpad上托管的相当流行的开源软件,但它不是很稳定。我已经创建了自己的项目分支来稳定它,并仅应用我们需要的错误修复,而不会在正在进行的开发中添加其他更改。

当我提交错误,然后弄清楚如何自己修复错误时,我会将修复程序推送到我们的稳定分支。我应该如何将修订发布回主项目?我可以创建一个补丁文件并将其附加到错误中,也可以为我们的稳定分支提议合并。

如果我修复了多个错误,是否可以为每个错误提出单独的合并建议,或者它们是累积的?

最佳答案

更新:看来OpenERP项目的官方文档现在有guidelines for making merge proposals。我还将在这里保留我的版本,因为它有一些不同的细节。

在与Bazaar和Launchpad玩了几天并提交了一些补丁程序并合并了提案之后,我认为我应该写一份发现内容的摘要。 Launchpad和Bazaar提供了一些强大的工具,尤其是对于社区驱动的项目,但我认为新用户可能不会fall into the pit of success。有几种方法可以使过程缓慢而令人沮丧,因此我希望本演练有助于某些人避免一些错误。

这是我学习的工作流程,涉及到错误修复以及将合并提案提交给团队的项目,该项目托管在Launchpad上。我正在使用GNU / Linux工作站,但是我认为Bazaar命令在其他平台上将是等效的。在此示例中,我正在处理OpenObject项目组中的一个项目,称为OpenObject Addons。维护者的用户名为openerp。我将工作空间放在~/workspace文件夹中。

如果要在此处了解有关任何命令的更多信息,请使用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,则首先需要create an account and register a public key

设置帐户后,您可以发布自己的分支机构作为官方分支机构的副本,然后开始使用它。 lp-login命令告诉bazaar在启动板站点上使用哪个帐户名,而whoami命令告诉bazaar在您提交的每个修订版上使用什么名称。您在whoami中使用的电子邮件地址应与您为启动板帐户配置的电子邮件地址之一匹配。

cd ~/workspace/openobject-addons/feature-x
bzr lp-login donkirkby
bzr whoami "Don Kirkby <donkirkby@example.com>"
bzr branch --stacked --switch lp:~openerp/openobject-addons/5.0/ lp:~donkirkby/openobject-addons/feature-x


您切换到新分支,以便将提交记录在本地历史记录和公共分支中。您可能想了解the difference between a checkout and a branch。将其设置为堆叠分支意味着创建起来非常快,因为它只包含不在官方分支中的历史记录。 This blog post听起来好像公共项目的分支应该默认为堆叠,但这对我没有用。请注意,我以要添加的某些功能命名了分支。作为bialix suggested,我为每个功能创建一个单独的分支,最终我将提议合并回官方分支。

提交并提出合并建议

现在您有了分支,可以更改代码并提交。

cd ~/workspace/openobject-addons/feature-x
bzr commit -m "Fixed bug lp:12345 by fleaking the woverbinate() function."


您可以在分支结构中的任何位置提交,默认情况下,它会提交整个分支。运行bzr help commit以获得详细信息。您可能还会发现bzr statusbzr diff有用。

对更改感到满意并将所有内容都提交给功能分支后,就可以转到启动板网站并创建合并建议。这是一个方便的快捷方式,您可以运行该快捷方式来启动分支的网页:

cd ~/workspace/openobject-addons/feature-x
bzr lp-open


创建合并提议后,启动板将为其生成差异。值得回顾一下差异。有时,我选择了错误的分支作为目标,而我只是注意到,因为差异的变化远远超过了我的预期。还有一个用于合并提案的bzr send命令,但是我没有使用它。

您可以通过e-mail interface扩展提案,也可以只使用该网站。

将分支附加到错误也很有用,以便其他人可以像在自己系统上的补丁一样使用它。

正在进行的变更

如果您使用多个功能,并且维护人员对建议的审核不是很迅速,那么可能值得建立自己的主线分支。该分支将所有功能汇总在一起,并保存将在服务器上运行的代码。如果官方分支不是很稳定,并且您想为生产环境稳定分支,这也很有用。然后,您可以决定何时升级到最新版本,以及何时为损害用户的错误采取特定的补丁程序。

第一步是创建另一个堆叠在官方分支上的分支:

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

关于open-source - 通过补丁或合并提案在启动板上提交错误修复?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2121225/

相关文章:

open-source - 商业应用中的开源控件帮助

c++ - Boost或TR1相当于gsl_matrix等

linux - 应用增量 Linux 补丁

project-management - 个人项目代码托管建议

svn - github中的私有(private)文件夹

security - 在开源项目中包含 Google Maps API Key?

database - 开源对象数据库?

php - 使用差异/补丁合并 PHP 更改

windows - 适用于 Windows 的补丁堆栈工具

git - DVCS 在远程服务器上工作