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

2023-11-23

我是新来的发射台 and Bazaar,我正在尝试找出提交错误修复的最佳方法。我正在使用一些托管在 Launchpad 上的相当流行的开源软件,但它不是很稳定。我创建了自己的项目分支来稳定它,并仅应用我们需要的错误修复,而无需添加正在进行的开发中的其他更改。

当我提交错误并找出如何自己修复它们时,我会将修复推送到我们的稳定分支。我应该如何将修复发布回主项目?我可以创建一个补丁文件并将其附加到错误中,或者我可以建议对我们的稳定分支进行合并。

如果我修复了多个错误,我可以为每个错误制定单独的合并建议,还是可以累积?


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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

通过补丁或合并提案在启动板上提交错误修复? 的相关文章

  • 模拟标准输入 - python 3中的多行

    我是 python 新手 一直在使用 python 3 进行学习 我正在使用 python 的单元测试框架来测试我的代码 问题 我需要进行单元测试的函数以以下方式接受输入 def compare a b c input strip spli
  • WCF 的开源替代品 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何使用 asp.net 为 Web 应用程序创建补丁文件

    我想了解 VS 2010 中是否有可用的规定或使用某些第三方工具来为 Web 应用程序创建补丁 热修复 我不想发布副本并替换文件 dll 方法 而是使用 Web 设置来安装应用程序 以便仅更新原始应用程序中更改的文件并将其安装在虚拟目录中
  • JSON Patch 规范的解释

    我有一个关于 JSON Patch 的解释的问题 RFC 6902 https www rfc editor org rfc rfc6902 假设我有一个如下所示的资源 type assembly uri http example com
  • WiX:补丁安装程序取代以前的版本(1.0.0 -> 1.0.1、1.0.0 -> 1.0.2、1.0.1 -> 1.0.2 等)

    我正在尝试提供一个简单的安装程序包 MSI 我希望通过取代所有以前的补丁的更新 补丁 来支持它 所以我有一个MSI V1 0 0和2个补丁V1 0 1和V1 0 2 用户应该能够只安装最新的补丁 无论系统上已经应用了哪些先前的补丁 我的项目
  • 当使用 svn cp 或 svn mv 时,如何使 svn diff 生成补丁将应用的文件?

    场景是 svn cp 或 mv 某些文件 修改该文件 svn diff gt 我的补丁 在其他机器上 相同的工作副本 但没有更改 尝试应用我的补丁 失败 gt 尝试修改不存在的文件 在这种情况下 如何使 svn diff 生成适用于补丁的补
  • 将开源 CMS 框架集成到现有的 MVC3 / MVC4 站点中 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我的任务是寻找一个可以慢慢集成到一组现有网站中的开源 CMS 通过这种方式 页面可以一页一页地传送到
  • 适用于 Windows 的优秀开源错误跟踪/问题跟踪软件 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 优秀软件设计和实现的示例[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我希望这不是重复的 您遇到过的设计和实施最扎实的软件系统 框架 应用程序是什么 似乎 TDD SOLI
  • 如何在 git 树的顶部应用补丁以防止重复?

    我正在为一个我认为很简单的问题寻求建议 并且通过创建一个小脚本确实可能很简单 但我认为应该已经有一种方法可以使用 git quilt stgit 来做到这一点 我不太擅长 git 这给我带来了一些问题 我的问题 我有一个 git 树 lin
  • 使用不同的应用程序对 git 中的 diff 输出进行着色

    我想用cdiff https pypi python org pypi cdiff使用 git 时对差异输出进行着色 我可以通过 cdiff 传递 git 命令的输出 但我想知道是否可以不必这样做 具体来说 当我使用git log p 当我
  • 有用的二进制差异工具(除了 msdn[apatch 和 mpatch]、xdelta、bsdiff、vbindiff 和 winmerge)[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我需要一个二进制 diff 工具 它可以从比较的 8MB 文件 dat 压缩文件 生成补丁文件 并且可以将生成的补丁文件合并到旧的 dat
  • 我应该如何处理 WiX 安装程序中的产品升级?

    我有一个相当大的 WiX 安装程序 250 Mb 以上 我正在尝试制定合适的升级策略 安装程序中的大多数文件都不会更改 并且当只有一两个文件发生更改时 我们不希望分发整个包 我研究了主要和次要升级 我的理解是 如果产品 ID 发生变化 只要
  • git、mercurial、bazaar 源代码库的可理解性

    我想阅读一种流行的版本控制工具的源代码 以了解版本控制的工作原理 我想读一本最具可读性的书 我不知道对此有什么客观 定量的衡量标准 所以本着WTF 分钟漫画 http www osnews com story 19266 WTFs m 想请
  • 我怎样才能让两个“发展流”(分支?)相互跟踪,同时在特定方面保持不同?

    BRIEF 我想让两个 或更多 开发流 环境相互跟踪 在两个方向上发送彼此之间的更改 而不完全收敛 同时保留某些关键的 本质的差异 细节 一个具体的例子 下面是一个具体的例子 我对我的主目录 glew home 进行版本控制已有 28 年了
  • 好的 PHP 开源分析/统计软件吗? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在构建的网址缩短服务需要向用户显示一些基本的点击统计信息 点击次数 转化次数 引用域和国家 地区
  • 开源隐形 reCAPTCHA 替代方案 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 有没有像 Google 的 Invisible reCAPTCHA V2 这样接近或最好的开源解决方案
  • 通过 GitHub、Sonatype Maven 存储库提供 JavaDocs [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 尽管 Github 为 Java 开源项目提供了一个不错的家园 但与更成熟的开源托管场所相比 仍然缺少一些东西 到目前为止 我发现 S
  • 开源 EDA 项目

    您知道 EDA 电子设计自动化 领域有哪些开源项目正在寻找 C 程序员吗 如果您经常关注 gEDA 的邮件列表 您也许能够加入 gEDA 细节 http www gpleda org developer html http www gple
  • Safari 的“阅读器模式” - 开源解决方案? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 Safari 有一个 阅读器模式 可以删除网站上除文本之外的所有内容 有谁知道提供相同功能的开源库 或

随机推荐

  • 上课T?添加范围 ICollection?

    我尝试做静态类 添加到 icollection 但我遇到了一些我似乎无法克服的问题 这就是我得到的方式 以便我可以在方法中传递 ICollection 原因T是说它无法解决 然后我想知道有没有办法在 icollection 上执行 AddR
  • genfromtxt 返回 NaN 行

    我正在尝试使用 numpy 读取 csv 文件 并且有以下代码 from numpy import genfromtxt data genfromtxt open errerr csv r names True delimiter 并出现以
  • 从c#中的控制台输入多行

    我正在尝试从控制台读取 c 中的一些值 然后处理它们 但是我陷入了错误 控制台的输入是 Name ABCD School Xyz Marks 80 here the user enters a new line before enterin
  • git clone:致命:无法从重定向更新 url 库:

    我正在尝试将 gitlab 克隆到我的本地库 在进行克隆时出现错误 致命 无法通过重定向更新 url 库 要求 重定向 用户签名 链接 任何人都可以让我知道如何解决这个问题 是的 我能够解决这个问题 粘贴 URL 时 我们不应该使用浏览器中
  • 为什么这里不需要显式强制转换?

    class MyClass void myMethod byte b System out print myMethod1 public static void main String args MyClass me new MyClass
  • nodejs require - 模块名称区分大小写问题

    最近我发现了一个关于node js require机制的奇怪问题 您可能会认为 由于 Windows 文件系统 所需模块是否区分大小写并不重要 所以 模块A require fancyModule 模块B require fancymodu
  • 如何抑制詹金斯管道控制台输出中的源脚本行回显?

    我正在 Jenkins 中编写一个管道作业 它在管道控制台输出中显示下游作业的输出控制台 到目前为止 该作业正在运行 但由于管道作业本身将所有回显线添加到输出中 因此输出确实很难读取 Started by user email protec
  • Codeigniter - 未指定输入文件

    我是 Codeigniter 的初学者 我看到了 CI 教程 只是想做一件简单的事情 我下载了 CI 并将此文件添加到控制器目录中 但它不起作用 当我尝试使用它访问它时http index php site我得到输出 未指定输入文件 顺便说
  • 谷歌翻译顶栏隐藏

    我在我的网站上使用谷歌翻译 我想隐藏谷歌翻译的顶部栏 请告诉我如何隐藏该栏 请在此处检查我的网站链接http www rewords com让我知道我要隐藏那个栏吗 Thanks 通过 CSS 完成 goog te banner frame
  • :root 变量在 :before 元素上不可用

    我将很多 css 变量分配给 root 但这些变量在我的 before 元素中无法访问 我在网上找不到任何关于此的信息 当检查 before 元素的父元素时 我在谷歌开发工具的样式面板底部看到所有 root 变量 请参阅下面的屏幕截图 my
  • 如何在 Python 中对函数进行深度复制?

    我想在 Python 中制作一个函数的深度复制 这copy根据该模块没有帮助文档 其中说 该模块不复制模块 方法 堆栈跟踪 堆栈帧 文件等类型 套接字 窗口 数组或任何类似的类型 它确实 复制 函数和类 浅层 并深入 通过不变地返回原始对象
  • 如何检测 makefile `--silent/--quiet` 命令行选项是否已设置?

    如何检测makefile是否存在 silent quiet命令行选项已设置 相关问题 如何检测是否使用 rake 指定了 quiet 选项 我认为你需要 findstring s word 1 MAKEFLAGS 因为 MAKEFLAGS
  • calendar.getDisplayName 返回错误的日期

    下面是我的程序 当我输入相关的月份 日期和年份时 它返回错误的日期名称 我在这里缺少什么 我的计划 import java util Calendar import java util Locale import java util Sca
  • 理解git:将分支连接到远程存储库

    我在 github 上有一个存储库 比如 testrepo 现在我想设置一个本地存储库repo有一个分支origin master我希望能够从存储库中编辑内容 repo origin master lt gt origin master 克
  • 有什么方法可以从 Linux 用户空间向 SD 卡发送命令吗?

    我有一个 Debian 7 0 Linux 3 2 嵌入式 ARM TI AM335x 系统 这是我们开发的定制板 但是SD卡部分至少和开发板是一样的 我想向卡发出一些特定于供应商的 SD 卡命令 即使用 CMD56 读取一些 SMART
  • 替代 PHP exec() 函数

    目前我正在使用 exec zcat filename output 解压缩一个 Z输入文件 但不幸的是我的托管公司现在已禁用此功能 有解决方法吗 pathtofile filename lis Z exec zcat pathtofile
  • 可串行化事务死锁

    文件说 serializable交易一笔接一笔地执行 但实际上这似乎并非事实 这是两笔几乎相等的交易 区别只是延迟了 15 秒 1 set transaction isolation level serializable go begin
  • Int 数组的数组。仅按顺序存储重复项

    我需要存储一个 Int 数组的数组来存储有序重复项 位于数组中 Example 给定数组 mainArray 7 7 3 2 2 2 1 7 5 5 现在我需要创建一个 int 数组的二维数组 例子 Array 7 7 3 2 2 2 1
  • R:从数值变量和自定义/开放式/单值区间创建分类变量

    我经常发现自己尝试从数值变量 用户提供的一组范围创建分类变量 例如 假设我有一个带有数字变量的 data framedf V并想创建一个新变量df VCAT这样 df VCAT 0 if df V等于 0 df VCAT 1 if df V
  • 通过补丁或合并提案在启动板上提交错误修复?

    我是新来的发射台 and Bazaar 我正在尝试找出提交错误修复的最佳方法 我正在使用一些托管在 Launchpad 上的相当流行的开源软件 但它不是很稳定 我创建了自己的项目分支来稳定它 并仅应用我们需要的错误修复 而无需添加正在进行的