GitHub 多人协作仓库的开发流程
@ Kayman · Friday, Jul 31, 2020 · 3 分钟阅读 · 更新于 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 结束后 删除 本地和远程仓库的 临时分支
  • 结果 ,本地仓库与上游仓库 一致 ,远程仓库 滞后(除非在未开发阶段将本地仓库推送到远程仓库,方能保持远程仓库与本地仓库一致)

本文结束。

Git GitHub
保存为图片
0

Kayman 的博客
你可以碌碌一生,但不能庸碌无为。

ByteDance (1) Flink (1) Git (6) GitHub (1) HTML (2) Hugo (3) Kafka (1) Markdown (1) Marp (1) Redis (1) Shopee (4) shortcodes (1) Universe (1) 十维时空 (1) 可爱 (1) 后端 (7) 多维空间 (1) 奇奇怪怪 (1) 字节 (1) 字节跳动 (1) 旅行 (1) 欧路词典 (1) 毕业 (1) 毕业旅行 (1) 破解 (1) 符号 (1) 腾讯 (2) 虾皮 (4) 面试 (8)

© 2020 - 2022 | Kays Blog ⑅︎◡̈︎*

Powered by Hugo with Author Kayman.

友链 :💬 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~

憨批の自我介绍

🍺 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 🤏


做过啥:

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

Share Musics   ⑅︎◡̈︎*

每日一言