1. 为何选用git
git是分布式代码版本管理工具。相比svn和其他版本控制系统来说,git功能更加强大。
* svn与git的比较
(1) git是分布式代码版本管理工具,而svn是集中式
所谓分布式集中式,指的是代码仓库与各个用户的代码仓库关联关系。分布式讲究的是每个用户的计算机都能作为中央仓库,与其他计算机分享代码仓库,能够在离线状态下使用;而集中式讲究中央控制,会有一个独立的代码仓库,每次工作前都需要从中央仓库中拉取最新代码,工作结束后需要提交到中央仓库,所以svn每次使用时必须在联网状态下。
(2) git从远程仓库中拉取到最新的代码后,能获取到所有的历史,但svn不能。
(3) git分支指向的是某一次提交,而svn保存的是文件的目录,因此git切换分支的成本远远小于svn的成本。
(4) svn的操作命令比较简单,容易上手,相比之下git的命令比较复杂。
综上所述,git命令虽然比较复杂,但是不可否认它的功能强大,因此大部分公司都采用git作为代码版本控制工具。
2. git工作状态
状态示意图:
从上图我们可以看出,工作状态主要分为工作区、暂存区和远程仓库三个部分:
(1) 工作区:工作区中的文件可以是远程仓库拉取下来的文件,在这些文件中,用户可以使用并修改。
(2) 暂存区:这里的文件是用户在工作区中增删改之后,准备提交到远程仓库的内容
(3) 远程仓库: 一旦你的commit提交到了远程仓库中,那么你的项目文件快照将会永久保存在历史。
3. git文件追踪
在git使用过程中,如果不想某些文件被追踪并提交到git仓库,如日志文件、编译的二进制文件,则可以在git仓库的根路径中添加.gitignore文件,文件中所匹配到的文件则不会被追踪到。
.gitignore文件示例:
# ignore all .a files *.a
* .a
该文件可以使用正则表达式进行书写,从而能灵活的决定哪些文件需要提交到远程仓库并被其他人所共享。
注意:如果项目的子路径也有.gitignore文件,则子路径将会覆盖掉父路径的文件。
4. git的commit哈希算法
git 采用的是SHA-1算法,来保证commit的完整性。
SHA-1(英语:Secure Hash Algorithm 1,中文名:安全散列算法1)是一种密码散列函数,美国国家安全局设计,并由美国国家标准技术研究所(NIST)发布为联邦数据处理标准(FIPS)。SHA-1可以生成一个被称为消息摘要的160位(20字节)散列值,散列值通常的呈现形式为40个十六进制数。
虽然使用SHA-1算法会产生40个十六进制数,但是git作为人性化方便使用的工具,通常来讲可以使用前8-10位来唯一标志一个commit,最多的linux内核多达 875,000个commit,也只需要前12位十六进制数来表示唯一commit。