Git是一个开源的分布式版本控制系统,用以有效、高速的处理从很小到很是大的项目版本管理。Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。
每个SVN用户均可以从服务器checkout代码,一样也能够像服务器提交(commit)代码,能够更新(update)到别人提交的代码。git
优点:全部的操做都须要基于SVN中心服务器,因此操做起来必然很简单。程序员
劣势:正由于全部的操做都要基于SVN中心服务器,因此只要SVN中心服务出现冲突(conflict)、错误(error)都会给整个团队之中的成员带来灾难。github
git是一个去中心化的分布式版本控制工具api
每个节点均可以充当控制中心的做用,因此从GIT服务器复制(clone)一份到本地,一样也能够单独对本身的本地git版本进行单独管理。 在针对单个git版本库的操做(commit,pull)就如同SVN的commit与update操做。固然,不一样版本库之间的操做就是拉取(pull),推送(push)。服务器
以一个APP为例,咱们研发一款移动APP的过程当中,必然是一个迭代迭代的来。首先是1.0、1.一、1.2…….2.0…..3.0等等~。app
这个时候为了防止影响已经稳定的线上版本,咱们必然会对已经上线的版本作一个备份(master分支),使用另外一个copy过来的项目进行开发(dev分支)分布式
这样公司的程序员小A就能够在dev分支上开发了,就算开发的时候小A脑残,不当心把逻辑弄错,没法正常运行的时候。咱们还有稳定版本的Master分之,可使用。(固然,你也能够回滚revert)svn
由于,存在一个本地仓库,咱们就能够在一个功能没有彻底开发完毕的时候先提交commit到本地仓库,测试好没有问题以后再push到远程git服务器。 避免了,没有开发完成的项目产生任何差池没法处理。工具
若是只有一个开发者开发,那么上诉的操做并无什么大碍。对于实际的开发工做中咱们每每是多个开发者共同来开发一个项目。多人修改一个文件必然会出现冲突(conflict); 不一样人的思想开发一个逻辑不免会出现漏洞与错误;如何进行code review、代码质量把控、冲突下降才是git的优点。gitlab
同理,A、B、C三位员工仍是能够在本身的我的分之上进行开发,全部的提交都不会影响到其余人。
尽可能可能的下降耦合性就是git版本控制工具的核心思想。每一个人均可以在本身的分支尽情操做,直到本身的分配的功能开发完毕。 这个时候就须要,将本身新增的功能回归到dev分支上,与团队其余的成员所开发的功能进行合并。
这个时候,就能够发起合并请求(merge request)
线上紧急bug处理,快速发版 一个迭代开始的时候,咱们每每相对于上一个迭代修改了不少代码。这个时候,因为开发时间与上线的速度问题,咱们很难对上一个线上版本存在的bug进行快速修复。固然,若是出现p0级的bug,咱们不得不进行快速修复上线的时候,咱们以前设计的分之模型就比较有用了。
以下图所示
由于master分之与线上的代码保持了一直,咱们但愿临时性处理一些问题,咱们就从master分之临时性的拉出一个fix bug分之。 将正在开发的分之切换到fix bug分之,快速修复bug上线。而后在切换到本身的dev_xx分之进行迭代开发,作到的环境的快速切换。
使用git的时候,咱们每每使用branch解决任务切换问题,例如,咱们每每会建一个本身的分支去修改和调试代码, 若是别人或者本身发现原有的分支上有个不得不修改的bug,咱们每每会把完成一半的代码 commit提交到本地仓库,而后切换分支去修改bug,改好以后再切换回来。这样的话每每log上会有大量没必要要的记录。
其实若是咱们不想提交完成一半或者不完善的代码,可是却不得不去修改一个紧急Bug,那么使用’git stash’就能够将你当前未提交到本地(和服务器)的代码推入到Git的栈中。
usage: git stash list 列举出本身的暂存代码 or: git stash show 查看stash的详情 or: git stash drop 丢弃stash or: git stash ( pop | apply ) 弹出栈中的stash or: git stash branch stash某个分之 or: git stash [save [--patch] 压入栈stash or: git stash clear 清空
操做流程
建立仓库
简易的命令行入门教程:
Git 全局设置:
git config --global user.name "superworker" git config --global user.email "huyanliang@inpingo.com"
建立 git 仓库:
mkdir api cd api git init touch README.md git add README.md git commit -m "first commit" git remote add origin https://git.oschina.net/superworker/api.git git push -u origin master
已有项目?
cd existing_git_repo git remote add origin https://git.oschina.net/superworker/api.git git push -u origin master
git clone https://git.oschina.net/superworker/api.git
git checkout dev
git checkout -b [new-feature]
git push origin [new-feature]
查看分支:git branch 建立分支:git branch <name> 切换分支:git checkout <name> 建立+切换分支:git checkout -b <name> 合并某分支到当前分支:git merge <name> 删除分支:git branch -d <name> ``