fork仓库

img_4

img_5

此时会将该仓库在复制一份,并存放在你的路径下:

img_6

设置上游代码库

进入本地代码库:

1
2
3
4
5
6
7
8
9
10
11
12
13
# 从自己仓库进行clone(fork)
git clone https://github.com/qiqiuyang/bk-ci.git

# 进入目录
cd bk-ci/

# 查看目录结构
$ ls
CHANGELOG CONTRIBUTING.md README_EN.md support-files
CODE_OF_CONDUCT.en.md docker-images README.md THIRD-PARTY-NOTICES.txt
CODE_OF_CONDUCT.md docs scripts
CODEOWNERS helm-charts SECURITY.md
CONTRIBUTING.en.md LICENSE.txt src

查看远程仓库的路径

1
2
3
$ git remote -v
origin https://github.com/qiqiuyang/bk-ci.git (fetch)
origin https://github.com/qiqiuyang/bk-ci.git (push)

这里可以发现从自己仓库clone下来后,fetch和push的路径都是自己的。

设置上游代码库

1
$ git remote add upstream git@github.com:TencentBlueKing/bk-ci.git

再次查看远程仓库地址:

1
2
3
4
5
$ git remote -v
origin https://github.com/qiqiuyang/bk-ci.git (fetch)
origin https://github.com/qiqiuyang/bk-ci.git (push)
upstream git@github.com:TencentBlueKing/bk-ci.git (fetch)
upstream git@github.com:TencentBlueKing/bk-ci.git (push)

同步源仓库的更新

使用下面的命令拉取源仓库的更新:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
$ git fetch upstream
remote: Enumerating objects: 17643, done.
remote: Counting objects: 100% (13492/13492), done.
remote: Compressing objects: 100% (3960/3960), done.
remote: Total 10070 (delta 4278), reused 8600 (delta 3184), pack-reused 0 (from 0)
接收对象中: 100% (10070/10070), 2.44 MiB | 2.05 MiB/s, 完成.
处理 delta 中: 100% (4278/4278), 完成 657 个本地对象.
来自 github.com:TencentBlueKing/bk-ci
* [新分支] master -> upstream/master
* [新分支] release-1.11 -> upstream/release-1.11
* [新分支] release-1.14 -> upstream/release-1.14
* [新分支] release-1.2 -> upstream/release-1.2
* [新分支] release-1.3 -> upstream/release-1.3
。。。
。。。
* [新标签] v1.8.4 -> v1.8.4
* [新标签] v1.8.5 -> v1.8.5

到这里就比较清晰了,在更新时就是把源仓库的更新的分支放在upstream下,例如:upstream/master

所以同步远端分支时,就是git fetch upstream,然后将自己的分支merge目标分支内容,例如:git merge upstream/master

如此便可以实现自己的fork仓库同步源仓库的新变更了。

向原仓库发起PR

首先在自己的仓库点击Pull Request->New Pull Request,进入以下截图页面

img_7

base repository为原仓库的某个分支,head repository为fork仓库发某个分支, head的某个分支代码合到base的某个分支

img_8

进入原仓库的Pull requests可看到刚才发起的PR, 这里就不演示了