本文面向有基础的git经验的读者

在用git进行协作时, 需要有主仓库, 角色分为拥有者和协作者

对于拥有者而言, 操作和个人仓库一致, 只是需要处理别人的PR(pull request)
而协作者的操作会有所不同, 下面我们主要介绍以协作者的身份如何使用git

简要思路:

  • fork拥有者的仓库rep1, 成为自己的仓库rep2
  • git clone自己的仓库rep2到本地
  • git init之后设置自己的远程仓库rep2信息, 并且设置upstream为rep1
  • 进行修改操作(由于源仓库rep1可能随时更改, 需要经常fetch源仓库rep1)
  • 修改完之后, 本地执行git merge并commit
  • git push到自己的仓库rep2
  • 在github上手动提交PR到源仓库rep1
  • 等待源仓库拥有者确认PR即可成功

此时代码的流程图如下

fork并clone到本地

首先需要在github上fork别人的仓库到自己账户, 直接点击即可, 不多赘述

然后需要大家将fork的仓库代码clone到本地, 后面的所有操作都是基于本地代码库来进行操作的

1
git clone git@your-rep-addr

设置upstream

然后查看远程仓库信息

1
git remote -v

应该只有如下两条

origin  https://github.com/your-rep (fetch)
origin  https://github.com/your-rep (push)

说明我们没有添加upstream(即源仓库rep1, 为我们fork的仓库rep2的上游仓库)
我们需要手动添加, 如下

1
2
git remote add upstream https://github.com/src-rep-addr
git remote -v

此时就会出现类似下面这种

remote.origin.url=git@your-rep
remote.origin.fetch=+refs/heads/*:refs/remotes/origin/*
remote.upstream.url=git@src-rep
remote.upstream.fetch=+refs/heads/*:refs/remotes/upstream/*

本地修改

设置好仓库之后, 直接修改并提交即可, 不多赘述

需要注意的是, 也许我们修改的时候源仓库rep1已经变化, 我们需要经常同步源码

1
git fetch upstream

此时若rep1有修改, 会新建一个分支upstream/master(假设远程仓库是master)

可以通过git branch -a查看

1
git branch -a

我们再手动merge即可

1
git merge upstream/master

push到自己的仓库并提交PR

注意, 提交之前也请先检查源仓库rep1是否更改, 并执行fetch和merge

然后一键三连

1
2
3
git add .
git commit
git push

接着再回到github上的自己的仓库rep2, 提交PR到源仓库rep1

img
img

不出意外的话, 如下显示Able to merge, 点击Create pull request即可

img

等待源仓库的拥有者确认, 就协作成功了


参考文章
https://zhuanlan.zhihu.com/p/377469858