GitHub 多人协作仓库的开发流程

Friday, Jul 31, 2020 | 3 | Friday, Jul 31, 2020

@

针对 GitHub 中多人协作的仓库的开发流程的详细说明 ⑅︎◡̈︎*

 
——> 全文约 800 字 <——

背景

对于一个多人协作的公共仓库而言,正确的开发流程能够保证本地仓库和上游仓库(公共仓库)保持同步,由于我之前在往一个 Apache 项目提交 PR 的过程中出现了几次提交和同步的问题,因此在此做一些记录。

前提

由于本文内容针对多人协作的 公共仓库 进行说明,因此默认你此时满足:

  • 已将 GitHub 的公共仓库 fork 到自己的 GitHub
  • 在本地已 clone 或者 下载 上述任一仓库
  • 在本地仓库配置 远程仓库 origin 为 GitHub 上 自己的仓库
  • 在本地仓库配置 上游仓库 upstream 为 GitHub 上的 公共仓库
  • 上述所有仓库的 主分支/默认分支 均为 master

本文的阐述建立在以上五点基础之上。

开发流程

‍每次需要进行代码改动的时候,严格按照以下步骤进行操作:

  1. 切换到本地仓库的主分支
  2. 拉取上游仓库代码(同步)
  3. 创建并切换到一个临时分支
  4. 代码修改
  5. 提交代码到远程仓库的临时分支
  6. 提交 PR (在 GitHub 进行)
  7. 合并 PR 后本地仓库切换到主分支
  8. 删除本地仓库和远程仓库的临时分支

A. 创建临时分支

$ git checkout master # 在本地仓库的目录下切换到默认分支/主分支
$ git pull upstream master # 同步上游仓库的最新内容到本地仓库
$ git checkout -b caymanhktemp
# 创建一个临时 branch ,名字是 caymanhktemp ,并切换到该临时分支

ps. ‍ ‍git checkout -b caymanhktemp 命令相当于执行以下两步:

$ git branch caymanhktemp # 创建分支
$ git checkout caymanhktemp # 切换分支

使用该流程的原因:

远程仓库向上游仓库提交 PR ( Pull Request ) 的时候,PR 会按照 squash 的方式进行 merge ,如果不创建新的分支,远程仓库和上游仓库的提交记录将不能保持同步。

远程仓库的 commit 数量会在第一次 fork 上游仓库之后累积,在远程仓库中会显示 该仓库相对于上游仓库超前了 n 个 commits ,并一直显示在每一次提交的 PR 信息中,严重影响上游仓库的管理员对于 PR 的审核。

我正是在这个地方出现了问题!因此中途出现多次重新下载上游仓库并进行配置,十分影响开发体验!

B. 提交修改内容

$ git add -A
$ git commit -m 'commit log'
$ git push origin caymanhktemp # 提交到远程仓库的临时分支 caymanhktemp 下

C. 提交 PR

在 GitHub 的远程仓库下的临时分支 caymanhktemp 推送 PR 到 上游仓库的 master 分支。

D. 删除临时分支

$ git checkout master # 在本地仓库的目录下切换到默认分支/主分支
$ git branch -D caymanhktemp # 强制删除本地的临时分支 caymanhktemp
$ git push origin --delete caymanhktemp # 删除远程仓库对应的临时分支 caymanhktemp

ps. 在第二步中使用的是 git branch -D caymanhktemp 而不是 -d ,其原因是使用 -d 时 Git 会检查本地仓库的 caymanhktemp 分支是否与上游仓库的 master 分支完全同步,由于在我们的开发过程中,其他人也会对公共仓库(上游仓库)进行代码提交,因此难以保证 caymanhktemp 与上游仓库的 master 保持同步(同时我们也不需要保证其同步)。-D 指令是 --delete --force 的简写,因此能够强制删除本地仓库的临时分支。

删除临时分支这一步非常重要!只有每次在完成 PR 的 merge 后都把临时分支删除了,才能够避免本地仓库和远程仓库的分支数量越攒越多,也能保证下次创建临时分支的时候仍旧使用该分支名 caymanhktemp

总结

总的来说,多人协作仓库的开发流程有以下几个特点:

  • 开发前 ,保持本地仓库的 主分支 与上游仓库的 主分支 同步
  • 开发时 ,所有的开发工作都在本地仓库的 临时分支 下进行
  • 开发时 ,修改内容 push 到远程仓库对应的 临时分支
  • 开发时提交 远程仓库对应的 临时分支 到上游仓库的 主分支 下等待 merge
  • 开发后 ,merge 结束后 删除 本地和远程仓库的 临时分支
  • 结果 ,本地仓库与上游仓库 一致 ,远程仓库 滞后(除非在未开发阶段将本地仓库推送到远程仓库,方能保持远程仓库与本地仓库一致)

本文结束。

© 2020 - 2026 Kays Blog ⑅︎◡̈︎*

🌱 Powered by Hugo with theme Dream.

憨批の自我介绍
🍺 Kayman' Blog 🏎️

这个博客用来记录一些生活&学习上的事情 ⑅︎◡̈︎*

一名憨憨CRUD专家,现就职于Shopee ,数据鸡架的 Flink 方向

业余时间只剩下 羽毛球🏸️|篮球🏀|德州♠️|打游戏🎮|肥宅🥤 了……

-- 2022 年 02 月 08 日更新 --

一名憨憨CRUD专家,现即将从就读于 🏫 北大青鸟毕业

业余时间会做开源和一些别的项目啥也不会做

目前准备去1075了,顺便捣鼓些Geek Proj,养老的同时培养点兴趣驱使方向。


在北大最好的朋友是 江栽花 ,我们一个负责吹牛皮一个负责去 GayHub 偷别人的优秀代码,完成过很多烂番茄项目,搞过一段时间的磕盐。

尽管也没人认识我们,但是还是客套地说一下

-- 2021 年 06 月 18 日更新 --
技术栈 & Project

主要的技术栈是:

  • 目前工作的方向是 Flink ˙Ꙫ˙

  • Java ˙Ꙫ˙

  • Python ˙Ꙫ˙

  • SQL ˙Ꙫ˙

  • 一点点的 html + css + js 🤏

  • 一点点的 shell 🤏


做过啥:

(其实啥也没做过 ⑅︎◡̈︎*)

友链 :💬 I will put some of my friends' and technical Dalaos' blogs HERE so as to encourage myself (umm though it may not work hahah~) 📣 😤
⑅︎◡̈︎*

My BEST FRIEND in PKU, so l list her at the first row.

I modify my front-end framework from him. List him here so as to thx him~
加载每日一言中...