一、Git基本概念
在处理大型项目进行多人协作的时候,学会使用git是必不可少的技能。
Git是分布式的,Git不需要有中心服务器,我们每台电脑拥有的东西都是一样的。我们使用Git并且有
个中心服务器,仅仅是为了方便交换大家的修改,但是这个服务器的地位和我们每个人的PC是一
样的。我们可以 把它当做一个开发者的pc就可以就是为了大家代码容易交流不关机用的。没有它
大家一样可以工作,只不 过“交换”修改不方便而已。
Git是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理。
Git是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。
特点:
速度
简单的设计
对非线性开发模式的强力支持(允许成千上万个并行开发的分支)
完全分布式
有能力高效管理类似 Linux 内核一样的超大规模项目(速度和数据量)
二、版本控制器的方式
a、集中式版本控制工具
集中式版本控制工具,版本库是集中存放在中央服务器的,team里每个人work时从中央服务器下载代码,是必须联网才能工作,局域网或互联网。个人修改后然后提交到中央版本库。
举例:SVN和CVS
b、分布式版本控制工具
分布式版本控制系统没有“中央服务器”,每个人的电脑上都是一个完整的版本库,这样工作的时候,无需要联网了,因为版本库就在你自己的电脑上。多人协作只需要各自的修改推送给对方,就能互相看到对方的修改了。
举例:Git
三、Git工作流程
命令如下:
1. clone(克隆): 从远程仓库中克隆代码到本地仓库
2. checkout (检出):从本地仓库中检出一个仓库分支然后进行修订
3. add(添加): 在提交前先将代码提交到暂存区
4. commit(提交): 提交到本地仓库。本地仓库中保存修改的各个历史版本
5. fetch (抓取) : 从远程库,抓取到本地仓库,不进行任何的合并动作,一般操作比较少。
6. pull (拉取) : 从远程库拉到本地库,自动进行合并(merge),然后放到到工作区,相当于
fetch+merge
7. push(推送) : 修改完成后,需要和团队成员共享代码时,将代码推送到远程仓库
四、Git和SVN的对比
SVN 是集中式版本控制系统的代表,其版本库集中存放在中央服务器,程序员使用个人电脑从中央服务器获取最新版本,并将更新后版本推送到中央服务器。集中式版本控制系统的通病是必须联网才可以工作,如果是局域网还好,带宽够大,速度够快;如果是互联网且网速较慢的话,提交一个 10M 文件可能就需要 5 分钟。当然,出于安全等多方面因素考虑,企业内部有自己的局域网很正常。
Git 是分布式版本控制的代表,没有明确的中央服务器概念,每个程序员的电脑上都有完整的版本库,只需要将更改互相推送给对方即可。一旦其中某个版本丢失,只需要从其他电脑上复制一份即可,相当于互相备份的概念。
相比 SVN,Git 的最大优势可能是分支管理,这非常契合开源项目的需求,但不少使用 Git 的程序员没有最大限度利用这一优势,国内程序员对开源社区的贡献也相对较低。SVN 的主要优势是目录级别权限控制,可以 Checkout 子目录,方便公司或团队管理,不少云供应商也提供云端的 SVN 相关工具。
SVN 与 Git 的使用场景本身不尽相同,因此并不存在高低之分。但就现状而言,程序员与开源项目的接触越来越多,企业也越来越喜欢使用开源项目,即便公司内部使用 SVN,但 Git 也会成为程序员的一项必备技能,毕竟在 Github 上互相交流是需要的,但 Git 在实际使用中还是存在很多问题。