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