一、Git是什么?
很多初次接触Git的人总是把Git与Github等同起来,我刚开始也是如此。其实Git是一个分布式软件控制/配置管理软件;而Github是一个可以托管Git版本库的网站而已。越来越多的开源项目选择使用Git进行管理,然后托管在Github网站上。
Git与svn、cvs都是进行版本管理的软件,不过控制方式却不尽相同。其中,cvs、svn属于集中式版本控制系统,所有开发者都需要跟统一的服务器版本库进行比对提交;而Git属于分布式版本控制系统,每个开发者都可以拥有一个自己的版本库,然后再进行合并提交。
二、Git的基本操作?
关于Git网上已经有很多基本操作的文章,由于Git很多是指令操作,介绍指令的很多,当然Git也有图形化工具支持,相关介绍也不少。我这里不赘述,给几个还不错的链接。
Git简单使用指南(这个指南看过之后常用的操作应该没什么问题了)
Git常用命令(这个博文画了个命令的思维导图,指令还挺全面的)
Git相关的插件及图形化工具可以参考如下链接:
Git在Eclipse中的插件EGit的使用方法
Git在Windows下的工具MsysGit/TortoiseGit的使用方法
三、Git的冲突解决方法?
在多人协作开发过程中,很容易出现合并冲突。大多数情况下Git都可以自动合并成功,但是如果两个修改了同一个文件的同一个区域,此时就会出现逻辑冲突,无法自动合并成功,必须手动处理。
发生冲突时,冲突文件会出现特殊标识符。其中<<<<<<<(七个小于号)和=======(七个等于号)之间的是当前分支的内容,=======(七个等于号)和>>>>>>>(七个大于号)之间的内容是合并的分支的内容。此时需要人工判断保留哪些内容,修改完成后,再将文件提交在暂存区(add操作),再提交到版本库就解决冲突了。
四、Git的内部原理?
Git在有远程版本库时,基本的工作流大致如下图:
而Git版本控制最关键的便是.git目录,几乎所有Git存储和操作的内容都在这个目录下。具体的目录存储内容如下:
在这些目录中,最重要的当属objects目录,因为版本库存储的所有对象(文件内容、提交记录)都放在这个目录下。目录中总共存储有四种对象:tag对象、commit对象、tree对象、blob对象;关系图的一角大致如下:
其中Tag对象指向一个Commit对象,有点像分支引用,不过tag对象的指向永远不会变化,而分支引用是可以任意改变的。
五、Git学习资料?
Git的学习门槛个人感觉比svn要高一些,当然基本操作还是可以比较快速的掌握的。Git的指令集非常丰富,功能远比想象中的强大得多。网上有很多的博文介绍,我也收集了些书籍。按照个人读后的感觉,由简到难排序:
1. 《Pro Git》 中文链接 英文链接 下载地址
2. 《Git community book》 中文地址 下载地址
3. 《Git权威指南》 下载地址