目录
当前位置: 首页 > 文档资料 > Git 入门教程 >

Forking 工作流

优质
小牛编辑
130浏览
2023-12-01

Fork 指的就是把在别人盘子里的菜(仓库)叉(Fork)到自己盘子里。假设你是一个项目的开维护者,一个发起人,你把项目推送到了一个公共的远程仓库上。其他的开发者相中了你的项目,他们可以把你的远程仓库 Fork 到自己的远程仓库里,然后再把自己的远程仓库克隆到本地。

比如有个叫 Hulk 的开发者就做了这件事,Fork 了你的远程仓库。Hulk 在本地创建功能分支,对项目做开发,完成以后他把功能分支推送到自己的远程仓库里,然后创建一个 pull request 通知你一下。

你是项目的维护人,收到 pull request 以后,你可以直接在网站上检查一下,或者可以 pull 到本地检查,看看 pull request 里的东西。如果觉得可以,你就可以把 Hulk 的 pull request 合并到项目的主分支上,再 push 到项目的远程仓库。其他的开发者可以把你新 push 上去的东西 pull 到他们各自的本地仓库里。

在 Forking 工作流中,每个开发者都有自己的独立的远程仓库。

练习

1,Hulk 觉得我们的项目不错,他在我们项目的远程仓库页面,点了 Fork 按钮,把仓库 Form 到了他自己在 Github 的帐户下。

2,Hulk 要把他 Fork 的远程仓库克隆到他的本地:

git clone https://github.com/hulk8080/test-git.git hulk-git

进入到项目所在的目录 hulk-git,然后查看一下仓库的远程:

→ git remote -v

origin    https://github.com/hulk8080/test-git.git (fetch)
origin    https://github.com/hulk8080/test-git.git (push)

克隆以后自动会有个 origin 远程,观察 origin 远程的地址,是在 hulk8080 这个用户名下。开发者还得去添加一个远程,指向项目的官方仓库,这个远程的名字一般是 upstream:

git remote add upstream https://github.com/xnip/test-git.git

再查看一下远程:

→ git remote -v

origin    https://github.com/hulk8080/test-git.git (fetch)
origin    https://github.com/hulk8080/test-git.git (push)
upstream    https://github.com/xnip/test-git.git (fetch)
upstream    https://github.com/xnip/test-git.git (push)

再简单配置一下本地仓库:

git config --local user.name 'hulk8080'
git config --local user.email '[email protected]'

3,Hulk 开始为项目添加新功能了,他可以去创建一个功能分支:

git checkout -b help-doc

Hulk 想为项目添加一个 GIt 命令使用的帮助文档,创建一个 git-help.md:

touch git-help.md

做一次提交:

git add .
git commit -am '添加 Git help 文档'

继续修改 git-help.md:

# git --help
git 命令的帮助信息。

再做一次提交:

git commit -am '添加 Git help 文档内容'

Hulk 看一下项目官方那里有什么新东西吧:

git pull upstream master

然后把 help-doc 推送到自己的远程那里:

git push origin help-doc
Counting objects: 6, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (4/4), done.
Writing objects: 100% (6/6), 596 bytes | 0 bytes/s, done.
Total 6 (delta 2), reused 0 (delta 0)
remote: Resolving deltas: 100% (2/2), completed with 1 local object.
To https://github.com/hulk8080/test-git.git
 ! [remote rejected] help-doc -> help-doc (permission denied)
error: failed to push some refs to 'https://github.com/hulk8080/test-git.git'
 → git push https://[email protected]/hulk8080/test-git
Password for 'https://[email protected]': 
Counting objects: 6, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (4/4), done.
Writing objects: 100% (6/6), 596 bytes | 0 bytes/s, done.
Total 6 (delta 2), reused 0 (delta 0)
remote: Resolving deltas: 100% (2/2), completed with 1 local object.
To https://github.com/hulk8080/test-git
 * [new branch]      help-doc -> help-doc

4,维护人

git fetch https://github.com/hulk8080/test-git.git help-doc
git checkout master
git merge FETCH_HEAD
git push origin master

5,所有人

git pull upstream master