如何向Launchpad项目提交补丁?

有了Git/GitHub的背景,对Bazaar版本控制系统知之甚少,我想偶尔向托管在Launchpad上的项目报告错误,甚至发送一个补丁。我希望以一种“适当”的方式进行,以便可以合并或改进,同时不会妨碍其他工作。
我似乎找不到适合我需求的简单易懂的操作指南。
我目前所做的是:
1. 创建了一个Launchpad账户, 2. 报告了错误, 3. 安装了Bazaar并设置了SSH密钥等。
如果这是GitHub,我会:
1. fork该仓库, 2. 克隆fork的仓库, 3. 创建一个合理命名的分支并进行工作, 4. 提交+推送, 5. 使用GitHub Web界面创建一个拉取请求。
但这不是GitHub,而且Launchpad和Bazaar的架构与GitHub/Git的对应物似乎有很大不同。
有没有好心人能帮我摆脱这一大堆文件的困扰,编写一个简明扼要的步骤指南,主要是第二部分?如果需要的话,最好还能包含相关的命令行指令。
编辑:看起来我应该澄清一下,我是在询问特指Ubuntu软件包(不管它是什么)还是Launchpad项目。
我并不太关心Ubuntu软件包和非Ubuntu软件包之间的区别。任何软件都可能今天在Ubuntu中,明天就不在了,反之亦然。开发才是更重要的,比分发更重要。
所以我假设:
- 并不是每个在Ubuntu中分发的软件包都托管在Launchpad上, - Launchpad存在一个“官方”或“默认”的工作流程(如果所有开发人员都能同意使用Bazaar,为什么大多数人不能同意一个修补工作流程?),
所以我询问的是Launchpad的方式,而不是Ubuntu的方式。我选择AU是因为交集很广,我猜这里讨论这个问题很合适。

这份简短的文档有帮助吗?如果有的话,请随意根据需要扩展现有答案。http://doc.bazaar.canonical.com/bzr.dev/en/mini-tutorial/ - lofidevops
请参阅http://developer.ubuntu.com/packaging/html/udd-uploading.html。 - lofidevops
2个回答

这是一个Launchpad项目吗?

(如果您已经知道这是一个Launchpad项目,您可以跳过此步骤。)

并非所有在Launchpad上找到的项目都实际托管和开发 - 其中一些是来自其他地方(GitHub/Gitorious等)的代码镜像,另一些来自Debian。这些原始来源被称为“上游”项目,通常最好在源处提交补丁,并让更改“下游”到达Ubuntu(通常在下一个版本中)。

项目页面上应清楚地指示它是否在其他地方或在Launchpad上托管。如果没有,请询问项目维护者他们希望如何接收更改。一些上游项目喜欢简单的补丁文件,而另一些则喜欢通过它们各自的主机提交/推送。

作为特别说明,官方的Ubuntu软件包(存储在官方Ubuntu存储库中,您可以从软件中心安装的软件)有几种不同的方法可以提交补丁,因为其中许多软件包直接来自Debian,理想情况下应该在那里修复而不仅仅是在Ubuntu中。(这是另一个问题。)

如何提交补丁

提交补丁的一般方式是创建您的分支,将其本地提交并将其推回Launchpad:

bzr push lp:~user/project/branch-name

你可以通过网站或使用 bzr lp-propose 命令将你的分支提议合并到你从中分支出来的父分支。
如果你已经提交了一个错误报告,并且你的分支修复了这个错误,请在提交时执行以下操作,其中000000被你的错误编号替换,假设它是在Launchpad上报告的错误,而不是其他地方。
bzr commit --fixes=lp:000000

关于“默认”工作流的说明
这基本上是一个典型的现代工作流程,你可以将其与GitHub进行比较。虽然Launchpad存在的时间更长一些,但这个工作流程是事后演变出来的,而不是从一开始就内置在系统中的,因此一些旧项目可能依赖于其他接受补丁的方法。然而,几乎所有较新的项目都依赖于这个工作流程,在GitHub上,“拉取请求”一直存在,人们只是默认使用它,因为在GitHub上从来没有其他选择的方式。

现在Launchpad支持git,你能更新一下答案吗?在Launchpad托管的git仓库中是否有类似于bzr commit --fixes=lp:000000的等效方法? - Archisman Panigrahi

根据dobey的回答Jorge Castro的回答对于一个特定项目问题的初始答案。欢迎编辑/更正/建议。

  1. 创建一个Launchpad账户。这将包括一个Launchpad用户名(LP-USER)。
  2. 将你的SSH密钥添加到Launchpad,地址为https://launchpad.net/~LP-USER/+editsshkeys
  3. 在Launchpad上记录项目名称(PROJECT-NAME)。
  4. 对该项目报告问题。问题将被分配一个bug编号(000000)。
  5. 确保已安装Bazaar dpkg-query -l bzr。你可能需要阅读Bazaar/Launchpad integration
  6. 使用bzr whoami "Your Name <name@example.com>"bzr launchpad-login LP-USER配置bzr
  7. 在你的机器上,检出该项目的一个本地分支
  8. bzr branch lp:PROJECT-NAME
    

    (这将创建一个名为PROJECT-NAME的文件夹,其中包含最新的项目代码。)

  9. 使项目运行起来。进行更改。测试更改。(这些步骤根据项目和问题而异。)
  10. 提交你的更改,包括bug编号(000000)。
  11. bzr commit --fixes=lp:000000
    
  12. 这将打开一个提交对话框,你可以在其中添加一条更改日志说明。
  13. 将你的更改推送到Launchpad。(这将创建一个与你的账户关联的新远程分支。)
  14. bzr push lp:~LP-USER/PROJECT-NAME/NEW-BRANCH-NAME
    

    NEW-BRANCH-NAME应该是修复的问题/添加的功能的简短描述性名称)

  15. 使用bzr lp-open或访问https://code.launchpad.net/~LP-USER/PROJECT-NAME/NEW-BRANCH-NAME/在浏览器中打开分支。
  16. 使用bzr lp-propose提出合并请求,或者使用上一步骤中的URL选择“Propose for merging”,添加描述,在要提出合并请求的分支中粘贴lp:PROJECT-NAME,然后点击Submit

问题:如果我的“项目名称”是ubuntu/saucy/msttcorefonts,我应该执行bzr push lp:~amandabee/ubuntu/saucy/msttcorefonts/actualbranchname还是只需执行bzr push lp:~amandabee/msttcorefonts/actualbranchname - Amanda
之前的命令:bzr push lp:~amandabee/ubuntu/saucy/msttcorefonts/actualbranchname 是有效的。 - Amanda