Git fork操作
文章目录
- Git fork操作
- 一.背景
- 二.概念
- 1.与git clone的区别?
- 2.用法流程
- 三.实操
- 1. fork仓库
- 2. 分支创建与提交
一.背景
最近我在github上发现一个很有意思的项目,看了其中相关的源码,而我呢,又很想加入其中,成为这开源项目的贡献者,而我又不可能让项目的作者给我分配一个开发者的权限,所以,这里就用到了
fork
这个操作
二.概念
fork 是github上的操作,使用fork功能会在github上,给你创建一个与该项目一样的同名项目。其实就是复制该项目,包括其中的文件,提交的历史,issue,和其他的一些内容,复制后的仓库存放于你自己的github账号下
1.与git clone的区别?
有人说,直接把项目拉下来,git clone
不就行了,何必还多此一举,fork一下?请注意,这里操作是跟所处环境不一样的,平常我们在公司开发,可以不用管fork这一步,因为创建这个项目的人,已经把开发权限都给我们了,我们只需要 git clone 下来,然后 push 代码即可。但是,我们如果没有给到我们开发权限,是无法进行push的。而我们又要开发,就需要用到fork这一步
git clone: git命令,将github仓库中的项目克隆到本地电脑中
fork:github网站的操作,将开源项目复制一份到我们github账号下,自己的仓库中
2.用法流程
这里引用一下,网络上的配图流程
- 1.fork一下Joe的github的仓库地址,到我们自己的github仓库下
- 2.git clone到本地电脑中
- 3.我们做一些代码的修改
- 4.本地进行commit
- 5.push到我们自己的仓库中
- 6.发起Pull request
如果对方接受了我们的pull request,那么我们做的一些修改,就可以合入到他的仓库中了,整个流程就走完了。
三.实操
以ElementUI为例,我们想为ElementUI共享自己的代码,可以试试以下操作
1. fork仓库
1.打开element
的代码库,github地址 https://github.com/ElemeFE/element
2.点击右边的Fork 按钮
3.这时会发现我们github自己的账号下,多了一个element
的项目,并且有备注:forked from ElemeFE/element
4.接下来,我们fork下来的仓库就在我们自己账号下了,使用方法和自己的仓库一样,git clone到本地
5.关联上游仓库,可以保证后面可以同步上游仓库的代码 相关参考文档
- 关联上游
git remote add upstream https://github.com/ElemeFE/element.git
- 验证
$ git remote -v
> origin https://github.com/YOUR_USERNAME/YOUR_FORK.git (fetch)
> origin https://github.com/YOUR_USERNAME/YOUR_FORK.git (push)
> upstream https://github.com/ElemeFE/element.git(fetch)
> upstream https://github.com/ElemeFE/element.git(push)
2. 分支创建与提交
当我们要新增功能或修复bug时,都需要再自己的仓库新增分支,新增分支时,是以需要修改的远程分支为基础进行新增,也就是,要修改远程的master,本地从fork仓库的master新建分支
ps:新建分支时,必须保证自己本地master分支与远程是一致的,可以使用以下操作进行同步:
- 1.git fetch upstream
- 2.git rebase upstream/master
- 3.git push origin master
这样就保证了从上游仓库中拉取到的最新代码,并且合入到自己仓库
我们创建好分支,并且做一些相应功能的增加和修改之后就到提交步骤了。为了更好的规范提交流程,可以使用以下步骤:
- git add .
- git commit -m ‘你的备注’ --amend(为了控制我们的提交记录只有一次,也就是只有一个change,因为别人不需要知道,你change的过程,只需要有一次提交就够了,更便于记录的管理)
- git push --force-with-lease (强制推送只能用于自己的仓库或自己的分支)
注意:
- 1.我们在第一次commit时需要签名,使用
git commit -S -m your commit message
其中-s
就是保证我们提交时会有你的签名 - 2.如果发现我们有多次提交,可以使用rebase控制为只有一个change
当我们代码提交之后,这个时候,就可以发起MR或PR了,gitlab是Merge Request,github是Pull Request,然后呢,再把这个MR或PR的链接发给其他同学帮你进行CR(Code Review 代码审查),然后CR通过之后,就可以开始合入代码了。