Git 补丁 vs. GitHub 拉取请求

5
我经常使用GitHub的PR(Pull Request),我想知道是否可以独立于GitHub进行“做PR”。这让我更多地了解Git补丁。
看起来GitHub为Git的补丁提供了方便的基于网络的工作流程。这是否准确?GitHub PR功能是否在底层使用Git补丁?或者GitHub PR功能只是合并两个分支的Git合并?也许无论哪种情况,Git合并都实际上是在使用Git补丁?
如果有的话,有人能澄清Git补丁和GitHub PR之间的关系吗?

1
请问您所说的“Git补丁”是指什么?是否是使用像git format-patchgit apply这样的工具? - Schwern
1
我不觉得自己有资格给出一个关于GitHub相对于补丁工作的“真正”的答案,但你的一般感觉确实是正确的。GitHub所做的大多数事情(改变代码的事情,而不是维基或问题跟踪)...大多数都是在包装Git中已经存在的真正强大的功能。许多项目通过电子邮件接受补丁文件。它看起来像这样:http://lists.subsurface-divelog.org/pipermail/subsurface/2016-January/024017.html,你可以使用`git am`来应用:https://git-scm.com/docs/git-am - pestophagous
@Schwern,我所说的“git补丁”是指当我在网络上搜索“git patch”https://www.bing.com/search?q=git+patch时出现的任何内容。 - Wallace Kelly
1个回答

5
我假设你所说的“Git补丁”是指git format-patchgit apply。Github PR使用这些工具吗?不使用。
Git补丁工具用于当某些原因导致您无法访问某人的存储库时。它们最常见的用途是基于电子邮件的工作流,使用git am等工具来管理通过电子邮件发送的补丁。接收您的补丁的人可以使用它们来重建您的历史记录。这实际上是推送、拉取和获取命令的笨拙替代品。
Github PR使用正常的Git分支和合并命令(或rebase)。您将分支的完整历史记录推送到Github,然后由Github为您执行合并。您也可以自己执行它们。如果您单击“查看命令行说明”,Github将向您提供要运行的等效命令。

enter image description here

我将解释每个命令。
步骤1:从您的项目存储库中获取更改并进行测试。 - git fetch origin - git checkout -b issue/#1761 origin/issue/#1761 - git merge master Git不会在未经您同意的情况下与网络通信。git fetch origin有效地下载名为“origin”的远程存储库的更新快照。在这种情况下,它是Github上的存储库。
现在,您可以检出用于PR的本地分支。在这种情况下,它是issue/#1761。origin/issue/#1761是您的“远程跟踪分支”,即您上次提取时分支issue/#1761所在位置的本地快照。
然后,您将master合并到本地版本的issue/#1761中,以使其保持最新状态。现在,您可以对其进行测试,以确保它与最新版本的master一起正常工作。奇怪的是,Github没有执行此来自master的更新的最后一步。

第二步:合并更改并在GitHub上更新。

  • git checkout master
  • git merge --no-ff issue/#1761
  • git push origin master

现在分支已经更新,您可以检出本地的master分支,使用--no-ff合并您本地的issue/#1761版本以确保即使可以快进,也会有一个合并提交, 然后将更改推送到Github的master分支。


你不需要Github来做这件事。你可以使用ssh搭建自己的远程Git服务器(设置方法)。虽然它没有所有功能,也没有PR界面,但你可以给人们ssh登录权限进行推送、拉取和所有基本的远程分支合并操作。
Github使用普通的Git合并工具,尽管可能经过了大规模修改以扩展规模。Github带来的主要是一种简单的方法,让每个人都可以从中央远程存储库推送和拉取,并添加标准化的身份验证、审核和操作流程。

而Github并不是唯一一个提供额外流程工具的托管服务。还有GitlabBitbucket和其他Git托管服务,以及各种独立服务器,如GiteaGitBucket


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接