将Git与GitHub配合使用

我们继续从以下内容介绍Sage开发 开发演练 。我们将讨论如何将您的本地更改推送到GitHub Sage存储库的分支,以便您的更改可以被审查以包含在Sage中。

在继续之前,请检查您是否拥有 originupstream 远程右侧::

[alice@localhost sage]$ git remote -v
origin  https://github.com/alice/sage.git (fetch)
origin  https://github.com/alice/sage.git (push)
upstream    https://github.com/sagemath/sage.git (fetch)
upstream    https://github.com/sagemath/sage.git (push)

开发工作流一览表

_images/workflow.png
  1. 爱丽丝创建了一个 new local branchcommits 对Sage源文件的更改。

  2. Alice将本地分支推送到远程 origin ,她在GitHub上的Sage回购分支,以及随之而来的 creates a PR 致Sage回购。准备好后,Alice将PR设置为 needs review 状态。

  3. 鲍勃,一位担任审查员的开发人员, examines the PR ,查看更改,在公关上留下评论,并请求修复 (needs work )。

  4. Alice在她的本地分支上执行更多提交,并将新提交推送到远程 origin 。这些新的承诺反映在公关中。

  5. Bob查看新提交中的更改并检查这些更改。

  6. 经过几次重复的评论和修复后,审阅者Bob终于满意了,然后他批准了PR并将其设置为 positive review 状态。

创建新的公关

假设您已经编写了一个用于计算最后一个孪生素数的算法,并将代码提交给一个本地分支 develop 布兰奇。现在,您想要将其添加到Sage。您首先要为此打开公关::

[alice@localhost sage]$ gh pr create
? Where should we push the 'last-twin-prime' branch? user/sage

Creating pull request for user:last-twin-prime into develop in sagemath/sage

? Title Last twin prime
? Choose a template PULL_REQUEST_TEMPLATE.md
? Body <Received>
? What's next? Submit as draft
https://github.com/sagemath/sage/pull/12345

这将为推送到您的分支的分支在Sage回购中创建一个新的公关,标题为“最后的孪生质数” alice/sage 从您桌面上的本地分支机构。标题自动派生自上次提交的标题。如果您不喜欢这样,那么您可以使用 -t 开关以显式指定它。请参阅该命令的手册页 gh pr create 了解更多细节。

如果您没有在提示符下提供有关PR的足够详细信息,您可能需要通过Web界面进一步编辑PR。

签出现有公关

如果您想要将您的工作建立在现有PR的基础上,或者想要查看PR的代码,则应运行:

[alice@localhost sage]$ gh pr checkout 12345
remote: Enumerating objects: 7, done.
remote: Counting objects: 100% (7/7), done.
remote: Compressing objects: 100% (7/7), done.
remote: Total 7 (delta 0), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (7/7), 25.50 KiB | 2.83 MiB/s, done.
From https://github.com/sagemath/sage
 * [new ref]               refs/pull/12345/head -> last-twin-prime
Switched to branch 'last-twin-prime'

该命令 gh pr checkout 下载PR的分支。就像 create 命令,您可以使用 -b 想换就换吧。

正在将更多更改上传到GitHub

创建PR后,请编辑相应的文件并将更改提交到本地分支机构,如中所述 编辑源代码作出承诺

如果到目前为止您已经准备好共享更改,请通过以下方式将您的新提交上载到您的分支:

[alice@localhost sage]$ git push origin
Enumerating objects: 13, done.
Counting objects: 100% (13/13), done.
Delta compression using up to 12 threads
Compressing objects: 100% (7/7), done.
Writing objects: 100% (7/7), 1.98 KiB | 1.98 MiB/s, done.
Total 7 (delta 6), reused 0 (delta 0), pack-reused 0
remote: Resolving deltas: 100% (6/6), completed with 6 local objects.
To https://github.com/alice/sage.git
 + 352d842907...56ffdab967 last-twin-prime -> last-twin-prime

请注意,您不会将分支推送到远程 upstream Sage回购。相反,新的提交被推送到远程 origin 在Sage回收站的公关中展示。

把它做完

在推送分支之前,通常要经历几次提交迭代,而且在准备审查分支之前,您还可能已经推送了几次分支。

一旦您对您推送的更改感到满意,在将其包含在下一版本的Sage中之前,必须由其他人对其进行审核。要将您的公关标记为可供审查,您应将其设置为 needs review 状态。

合并上游发展分支机构

经常发生的事情是 develop 远程分支机构 upstream 已更新,您需要将上游更改合并到本地分支。然后,您需要::

[alice@localhost sage]$ git fetch upstream develop:develop

这将快进您的本地 develop 向上游分支 develop 布兰奇。

现在,您可以返回到您的工作分支并合并更新后的 develop 分支机构::

[alice@localhost sage]$ git merge develop
....

如果没有与您在本地所做的更改冲突的上游更改,则此合并操作将完全完成。否则,你就会被淘汰 merge conflict 。这种情况很少发生,因为Git在合并变化方面很聪明。但是,一旦发生合并冲突,您就必须手动解决冲突。中介绍了冲突解决过程 冲突解决