Git诞生于2005年,大神Linus的作品,Github诞生于2008年,没有Git就没有GitHub,Github已成为全球最大的代码开源社区,注册免费用户即可在Github上免费托管开源代码,如需建立私有仓库必须付费。那么Gitlab又是什么?
GitLab和GitHub一样属于第三方基于Git开发的作品,免费且开源(https://github.com/gitlabhq/gitlabhq 基于MIT协议),与Github类似,可以注册用户,任意提交你的代码,添加SSHKey等等。不同的是,GitLab是可以部署到自己的服务器上,数据库等一切信息都掌握在自己手上,适合团队内部协作开发,你总不可能把团队内部的智慧总放在别人的服务器上吧?简单来说可把GitLab看作个人版的GitHub。
注意:先学习git基本命令,再看本文章,我只是根据自己所学简单介绍gitlab使用,推荐学习廖雪峰的git教程。欢迎指教本文错误的地方。
1. 创建保护分支
在团队中使用GitLab中的Merge Request工作模式
一般会创建一个develop分支(创建保护分支),把这个分支保护起来,大家想向develop分支提交跟新代码时,需要发起merge Request(如何发起merge request,注意要勾选最后一个选项:合并后删除该分支)。代码审核后才会合并到develop分支,保持develop分支的干净。
2. 创建自己本地分支
2.1、clone远程develop分支
# git clone xxx
2.2、新建本地分支
新建本地分支,并push到远程仓库(即开发新功能时,创建一个新的分支)
# git branch mybranch //新建本地分支mybranch
# git checkout mybranch //切换到mybranch分支
# git branch -b mybranch //新建本地分支mybranch,并切换到mybranch分支
创建本地分支并关联一个远程分支otherbranch(即在已有的分支创建本地分支继续开发,并把本地分支更新到远程分支otherbranch)
# git branch mybranch origin/otherbranch //新建本地分支mybranch,并关联到远程分支otherbranch
# git checkout mybranch //切换到mybranch分支
# git branch -b mybranch origin/otherbranch //新建本地分支mybranch,关联到远程分支otherbranch,并切换到mybranch分支
新建本地分支完成后,我们就可以在develop分支的基础上在自己分支上开发了。也可以关联到其他你要继续开发的远程分支(如otherbranch)。
3. commit和push之争
在之前用github时,在我们开发一部分功能后,想往远程仓库push时,为了避免冲突,到底是先pull还是先commit,今天终于有了答案。
git不同于其他版本控制系统之处是git是分布式,有远程仓库和本地仓库,本地仓库没有网也可以继续工作,也可以把我们修改的代码commit到本地仓库,所以先commit后push,一个功能可以分成很多块,当我们开发完一块后,就可以commit一次,并说明这部分是做什么的,方便merge request时审核人理解你的代码。当我们完成整个功能后,进行一次push,push后发起merge request请求合并到develop分支。
# git add . //添加所有文件,或者你可以执行添加你想添加的文件
# git commit -am "该部分是干什么的" //提交到本地仓库
4. 更新本地仓库和解决冲突
在push之前,一般我们会先pull一下,这里不建议用git pull,而是用git fetch + git rebase,( 使用git fetch和git rebase处理多人开发同一分支的问题)
# git fetch -p origin develop //更新远程commit id到本地新临时分支,以及删除远程仓库已删除的分支 或者git fetch -p origin otherbranch
# git rebase //整理commit ,“变基”
# git status //查看状态
如果有冲突,解决冲突
# git add . //添加
# git commit -am “解决冲突” //解决冲突后提交
# git rebase -continue //继续整理commit
# git status //查看状态
如果没有冲突,把自己本地分支提交到远程仓库,或者提交到远程关联分支:
把本地新建分支push到远程仓库,并创建远程分支
develop是保护分支,无权限直接合并到develop分支,需要merge rquest把自己的远程分支合并到develop分支
# git push --set-upstream origin mybranch //推到远程仓库
把本地分支push到关联的远程otherbranch分支
# git push origin HEAD:otherbranch //推到远程分支
5、合并分支
# git branch -a //查看所有分支
# git branch -d mybranch //删除分支
把mybranch合并到otherbranch
# git checkout otherbranch //切换到otherbranch分支
# git merge mybranch //把mybranch合并到otherbranch