本文面向有基础的 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 即可成功

此时代码的流程图如下

1.fork
2.clone/pull
3.push
4.PR
源仓库 rep1
你的仓库 rep2
本地仓库 local

fork 并 clone 到本地

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

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

shell
1
git clone git@your-rep-addr

设置 upstream

然后查看远程仓库信息

shell
1
git remote -v

应该只有如下两条

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

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

shell
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 已经变化,我们需要经常同步源码

shell
1
git fetch upstream

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

可以通过 git branch -a 查看

shell
1
git branch -a

我们再手动 merge 即可

shell
1
git merge upstream/master

push 到自己的仓库并提交 PR

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

然后一键三连

shell
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