首页 > 其他分享 >内核维护者手册 - 处理混乱的拉取请求差异统计【ChatGPT】

内核维护者手册 - 处理混乱的拉取请求差异统计【ChatGPT】

时间:2023-12-08 21:33:08浏览次数:50  
标签:... git vN 拉取 --- 维护者 ChatGPT

处理混乱的拉取请求差异统计

子系统维护者通常在将工作发送到上游的过程中使用git request-pull命令。通常,结果包括一个漂亮的差异统计,显示将要修改的文件以及每个文件将被修改的程度。然而,偶尔会出现一个相对复杂的开发历史的仓库,产生一个包含大量无关工作的差异统计。结果看起来很丑陋,掩盖了拉取请求实际要做的事情。本文描述了发生的情况以及如何修复问题;它源自Linus Torvalds的智慧,可以在Linus1和Linus2中找到。

Git的开发历史是一系列提交。以简化的方式来看,主线内核开发的情况如下:

... vM --- vN-rc1 --- vN-rc2 --- vN-rc3 --- ... --- vN-rc7 --- vN

如果想要查看两个点之间发生了什么变化,可以使用以下命令:

$ git diff --stat --summary vN-rc2..vN-rc3

在这里,历史上有两个明确的点;Git基本上会将结束点从起始点"减去",并显示出差异。所请求的操作是明确的,足够容易理解。

当子系统维护者创建一个分支并对其进行更改提交时,最简单的情况下,结果看起来像这样的历史:

... vM --- vN-rc1 --- vN-rc2 --- vN-rc3 --- ... --- vN-rc7 --- vN
                        |
                        +-- c1 --- c2 --- ... --- cN

如果该维护者现在使用git diff查看主线分支(我们称之为"linus")和cN之间的变化,仍然有两个明确的端点,并且结果如预期。因此,使用git request-pull生成的拉取请求也会如预期所示。但是现在考虑一个稍微复杂一些的开发历史:

... vM --- vN-rc1 --- vN-rc2 --- vN-rc3 --- ... --- vN-rc7 --- vN
              |         |
              |         +-- c1 --- c2 --- ... --- cN
              |                   /
              +-- x1 --- x2 --- x3

我们的维护者在vN-rc1创建了一个分支,在vN-rc2创建了另一个分支;然后将这两个分支合并到了c2中。现在为cN生成的拉取请求可能会变得非常混乱,开发者们经常会想知道为什么会这样。

这里发生的情况是git diff操作不再有两个明确的端点可供使用。导致cN的开发始于两个不同的地方;为了生成差异统计,git diff最终必须选择其中一个,并希望能得到最好的结果。如果差异统计从vN-rc1开始,它可能会包括从那里到第二个起点(vN-rc2)之间的所有更改,这显然不是我们的维护者所期望的。由于差异统计中有了所有这些额外的垃圾,可能无法确定在导致cN的更改中实际发生了什么。

维护者通常尝试通过重新基于分支或在将其推送到上游之前执行另一个合并来解决这个问题,然后重新创建拉取请求。这种方法往往不会在接收拉取请求的一方带来愉快的回应;在推送到上游之前进行变基和/或合并是一种众所周知的导致不满的方式。

那么应该怎么办呢?当面对这种情况时,最好的反应确实是与你打算将你的工作合并到的分支进行合并,但要将其作为一种耻辱的来源进行私下处理。创建一个新的、一次性的分支,并在那里进行合并:

... vM --- vN-rc1 --- vN-rc2 --- vN-rc3 --- ... --- vN-rc7 --- vN
              |         |                                      |
              |         +-- c1 --- c2 --- ... --- cN           |
              |                   /               |            |
              +-- x1 --- x2 --- x3                +------------+-- TEMP

合并操作解决了由多个起始点导致的所有复杂性,产生了一个只包含与主线分支的差异的连贯结果。现在可以使用所需信息生成差异统计:

$ git diff -C --stat --summary linus..TEMP

保存此命令的输出,然后简单地删除TEMP分支;绝对不要将其暴露给外界。将保存的差异统计输出编辑到混乱的拉取请求中,得到一个真实反映正在发生的情况的结果。然后可以将该请求发送到上游。

标签:...,git,vN,拉取,---,维护者,ChatGPT
From: https://www.cnblogs.com/pengdonglin137/p/17889086.html

相关文章

  • 内核维护者手册 - 特性和驱动程序维护者【ChatGPT】
    https://www.kernel.org/doc/html/v6.6/maintainer/feature-and-driver-maintainers.html术语“维护者”涵盖了从处理补丁和拉取请求几乎全职工作的人,到负责小特性或驱动程序的人的广泛范围。与本章的大部分内容不同,本节适用于后者(更多人的群体)。它提供了维护者小规模代码部分......
  • 内核维护者手册 - 配置Git【ChatGPT】
    https://www.kernel.org/doc/html/v6.6/maintainer/configure-git.html配置Git本章描述了维护者级别的Git配置。在拉取请求中使用的标记分支(请参阅创建拉取请求)应该由开发者的公共GPG密钥进行签名。可以通过向gittag传递-u来创建已签名的标签。然而,由于通常会为项......
  • Contributor Covenant 行为准则 【ChatGPT】
    https://www.kernel.org/doc/html/v6.6/process/code-of-conduct.htmlContributorCovenant行为准则我们的承诺为了营造一个开放、友好的环境,我们作为贡献者和维护者承诺,无论年龄、体型、残疾、种族、性别特征、性别认同和表达、经验水平、教育程度、社会经济地位、国籍、个......
  • Kernel Maintainer Handbook 【ChatGPT】
    https://www.kernel.org/doc/html/v6.6/maintainer/index.htmlKernelMaintainerHandbook这份文档是为内核维护者编写的指南的谦逊开端。这里还有很多工作要做!请随时提出(并编写)对这份指南的补充。功能和驱动程序维护者责任选择维护者不遵守规定配置Git创建提交链......
  • 提交补丁:将您的代码提交到内核的基本指南 【ChatGPT】
    https://www.kernel.org/doc/html/v6.6/process/submitting-patches.html对于希望向Linux内核提交更改的个人或公司来说,如果您不熟悉“系统”,这个过程有时可能会令人望而生畏。本文是一些建议的集合,可以极大地增加您的更改被接受的机会。本文档以相对简洁的格式包含了大量的建......
  • Linux内核开发流程指南 - 8. 获取更多信息【ChatGPT】
    https://www.kernel.org/doc/html/v6.6/process/8.Conclusion.html以下是您提供的文本的中文翻译:8.获取更多信息关于Linux内核开发及相关主题,有许多信息来源。其中最重要的始终是内核源代码分发中的Documentation目录。从顶层的process/howto.rst开始;同时也阅读process/subm......
  • Linux内核开发流程指南 - 4. 编写正确的代码【ChatGPT】
    https://www.kernel.org/doc/html/v6.6/process/4.Coding.html4.编写正确的代码虽然坚实且以社区为导向的设计过程有很多值得说的地方,但任何内核开发项目的证明都在于最终的代码。其他开发人员将审查这些代码,并将其合并(或不合并)到主线树中。因此,代码的质量将决定项目的最终成......
  • Linux内核开发流程指南 - 5. 编写正确的代码【ChatGPT】
    https://www.kernel.org/doc/html/v6.6/process/5.Posting.html5.提交补丁迟早会有一个时刻,你的工作准备好被提交给社区审查,并最终被合并到主线内核中。毫不奇怪,内核开发社区已经形成了一套用于提交补丁的惯例和程序,遵循这些规定将使所有相关人员的生活变得更加轻松。本文将......
  • Linux内核开发流程指南 - 6. 跟进【ChatGPT】
    https://www.kernel.org/doc/html/v6.6/process/6.Followthrough.html6.跟进到目前为止,您已经遵循了迄今为止给出的指南,并且凭借自己的工程技能,发布了一系列完美的补丁。即使是经验丰富的内核开发人员也可能犯的最大错误之一是认为他们的工作现在已经完成。事实上,发布补丁标......
  • Linux内核开发流程指南 - 7. 高级主题【ChatGPT】
    https://www.kernel.org/doc/html/v6.6/process/7.AdvancedTopics.html高级主题到目前为止,希望你已经掌握了开发过程的工作方式。然而,还有更多需要学习的地方!本节将涵盖一些对于希望成为Linux内核开发过程中的常规部分的开发人员有帮助的主题。7.1.使用git管理补丁内核......