我也讲讲Git
Git简介
Git,发音为:/ɡɪt/。Git是一个分布式版本控制软件,最初由林纳斯·托瓦兹(Linus Torvalds)创作,于2005年以GPL发布。
使用Git,不再依赖唯一的、集中式的版本库,而是每个开发者本地都拥有一份完整的版本库。 Git并不排斥集中式的使用模式,但更倾向于将集中式版本库称为共享版本库。
Git VS SVN
集中式版本控制系统,SVN:
开发团队的成员,凡是涉及到版本库的操作(检入、检出、查看日志等)都需要在联网的状态下进行,网络带宽对用户体验影响相当大。网络不好的时候,那就要了血命了。
而Git等分布式版本控制系统的出现,将版本库完全的本地化,减少对网络的依赖,不会再因为短时间的网络问题搞得焦头烂额了。
如何完成“把大象装冰箱”
用冰箱和大象制作一个”装有大象的冰箱”
没有版本控制时的代码管理(FTP)
最简单的版本控制就是保留不同版本的数份copy,并且适当编号。能用,但是很没效率。保存的数份copy代码大部分完全一样,也因为这种方法要高度依靠开发者的自我纪律,而常导致错误。
关键就三步:
- 把冰箱门打开(获取代码:download)
- 把大象放进去(编辑代码)
- 把冰箱门关上(上传代码:upload)
缺点:
- 开发团队只有一个人时没什么大问题,一旦团队达到2个人以上,就会出现各种代码覆盖问题。
- 历史版本完全人工维护,开发中的代码完全要由开发者分出精力维护。经常会因为疏忽而丢失代码。
CVS版本控制时期的代码管理
用户还是做三步:
- 把冰箱门打开(获取代码)
- 把大象放进去(编辑代码)
- 把冰箱门关上(上传代码)
但是CVS服务器会额外做以下动作:
- 备份当前版本的代码
- 合并新提交的代码
优点:
- 意义上的版本库版本控制,解决了手工维护各个版本代码的问题
缺点:
- 非原子性提交,每次提交都要提交整个冰箱(所有本地代码)
- 依赖网络中心
SVN版本控制时期的代码管理
用户还是做三步:
- 把冰箱门打开(获取代码:checkout,update)
- 把大象放进去(编辑代码)
- 把大象放进去的数据和大象丢给冰箱服务器(上传代码:commit)
SVN服务器会额外做以下动作:
- 备份当前版本的代码
- 把大象数据合并代码
优点:
- 原子性提交每次只传输大象和其放置的信息,不用每次传冰箱整个冰箱
缺点:
- 获取代码或切换分支时仍然要拉取整个冰箱,冰箱并不归自己,需要请求冰箱服务器,依赖网络中心
Git版本控制时期的代码管理
核心还是三步
- 组装一个自己的冰箱,打开冰箱门(获取代码:clone,pull,fetch)
- 把大象在自己的冰箱里组装好(编辑代码,并 commit )
- 把组装的大象数据丢给冰箱服务器(上传代码:push)
优点:
- 冰箱(代码)完全本地化,包括commit、rebase等操作完全在本地,简直是有一台服务器就在自己的本地运行一般(分布式,本地版本库)。冰箱在任何时刻的状态都可以在本地切换,不需要依赖网络和中心版本库就可以进行版本管理
- 拥有SVN具有的所有优点
缺点:
- 占用本地硬盘
用Git实现把大象装冰箱
基本使用
冰河世纪(clone,commit,pull,fetch,merge,push)
我们从冰箱服务器获取冰箱(clone)
准备一只松鼠
把松鼠放在冰箱里
完成,我们得到了一个装有松鼠的冰箱
提交commit(与SVN不同,git的commit是提交到本地版本库之中,不需要网络,也不会影响远端的中心版本库)
再把大象放进冰箱,与松鼠共存。
同时其他开发者把剑齿虎传到冰箱服务器
我们把他的数据从中心版本库服务器拉(Pull)到本地分支
我们现在冰箱里装着 松鼠 大象 剑齿虎
把我们的分支数据推(Push)给中心版本库服务器
其他开发者把水獭传到冰箱服务器
我们把他的数据从中心服务器取(Fetch)到本地 (这可能会创建新的分支)
之后用merge的方式与自己的master分支合并
我们现在冰箱里装着 松鼠 大象 剑齿虎 水獭
准备一个小孩
把小孩放在冰箱里
把我们的分支数据推(Push)给中心版本库服务器服务器
我们得到了《冰河世纪》
冰河世纪2(rebase)
先把老鼠放进了冰箱,又把另一只老鼠装进了冰箱,又把另一只大象放进了冰箱,之后把小孩从冰箱里拿了出来。
4个动作,感觉前三个都差不多,于是进行rebase,将多个commit合并为一个commit,把两只老鼠一只大象放进冰箱,把小孩拿出来,2个动作。
好了我们得到了《冰河世纪2》
冰河世纪3(Swtich/Checkout,merge)
另一组开发团队,在最初就分开开发(Swtich/Checkout)。往冰箱里放恐龙,恐龙恐龙恐龙恐龙恐龙恐龙恐龙恐龙,霸王龙翼龙角龙掠食龙黄鼠狼
好了现在跟《冰河世纪2》合并(merge)
我们得到了《冰河世纪3》
Git使用总结
- 使用clone(或者create)创建本地仓库
- 使用commit将修改提交到本地仓库
- 使用rebase将多个commit合并为一个commit,便于记录和后期维护
- 使用Push提交本地仓库的更改至远端仓库
- 使用Pull或Fetch+Merge将远端仓库的更改同步到本地仓库
- 使用tag打标签,生成发布版本
Git 使用规范流程
团队开发中,遵循一个合理、清晰的Git使用流程,是非常重要的。 否则,每个人都提交一堆杂乱无章的commit,项目很快就会变得难以协调和维护。
参考资料
git – 简明指南 : http://rogerdudler.github.io/git-guide/index.zh.html
Git远程操作详解 : http://www.ruanyifeng.com/blog/2014/06/git_remote.html
Git分支管理策略 : http://www.ruanyifeng.com/blog/2012/07/git.html
Git 使用规范流程 : http://www.ruanyifeng.com/blog/2015/08/git-use-process.html
1 comment
慕若曦
2016 年 2 月 16 日 在 下午 7:50 (UTC 8) Link to this comment
好有耐心的图文并茂 (= ̄ω ̄=)博主棒棒哒