繁体   English   中英

Git 补丁与 GitHub 拉取请求

[英]Git patches vs. GitHub pull requests

我经常使用 GitHub PR。 我想知道我是否可以独立于 GitHub 来“做 PR”。 这使我阅读了有关 Git 补丁的更多信息。

GitHub 似乎围绕 Git 的补丁提供了一个方便的、基于 Web 的工作流。 那准确吗? GitHub PR 功能是否使用 Git 补丁在幕后? 或者也许 GitHub PR 功能只是对两个分支进行 Git 合并? 也许 Git 合并真的在使用 Git 补丁?

有人可以澄清 Git 补丁和 GitHub PR 之间的关系,如果有的话?

我假设您指的是“Git 补丁”,您指的是git format-patchgit apply Github PR 是否使用这些工具? 不。

Git 补丁工具存在于无论出于何种原因,您无权访问某人的存储库的情况。 它们最常见的用途是基于电子邮件的工作流程,使用git am等工具来管理通过电子邮件发送的补丁。 收到您的补丁的人可以使用它们来重建您的历史。 这实际上是对 push、pull 和 fetch 命令的尴尬替代。

Github PR 使用正常的 Git 分支和合并命令(或变基)。 您将分支的完整历史推送到 Github,它会为您进行合并。 您可以自己执行它们。 如果单击“查看命令行指令”,Github 将为您提供等效的命令来运行。

在此处输入图像描述

我将解释每个命令。

第 1 步:从您的项目存储库中引入更改并进行测试。

  • git 取原点
  • git checkout -b issue/#1761 origin/issue/#1761
  • git 合并主控

Git 未经您的同意不与网络对话。 git fetch origin有效地下载名为“origin”的远程存储库的更新快照。 在这种情况下,这是 Github 上的存储库。

现在您对 Github 上的内容的想法是最新的,您可以查看 PR 的本地分支。 在这种情况下,这是issue/#1761 origin/issue/#1761是您的“远程跟踪分支”,分支issue/#1761是您最后一次获取的最后一个位置的本地快照。

然后将master合并到issue/#1761的本地版本中以使其保持最新。 现在您可以测试它以确保它适用于最新版本的master 奇怪的是,Github 并没有执行从 master 更新的最后一步。

第 2 步:合并 GitHub 上的更改和更新。

  • git 结账主控
  • git 合并 --no-ff 问题/#1761
  • git 推源主机

既然分支是最新的,您可以签出本地master分支,使用--no-ff合并本地版本的issue/#1761确保即使可以快进也有合并提交,然后将您的更改推送到master


为此,您不需要 Github。 您可以使用 ssh 设置您自己的远程 Git 服务器 它不会有所有的花里胡哨,也没有 PR 界面,但你可以给人们 ssh 登录名来推拉和做所有基本的远程分支和合并。

Github 使用普通的 Git 合并工具,但可能会根据规模进行大量修改。 Github 带来的主要内容是一种简单的方法来设置一个集中的远程存储库供每个人推送和拉取,并在流程中添加标准化的身份验证、审查和操作。

Github 并不是镇上唯一一个托管额外流程花哨的游戏。 GitlabBitbucket和其他 Git 托管服务。 以及各种独立服务器,如GiteaGitBucket

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM