认识Git
其实学习Git已经有一段时间了,但是一直不知道怎么把学的东西整理出来并写成博客。这个系列的博客不会详尽将Git的使用展现出来,毕竟已经有比较经典的Git教程了。本着实用的原则,会先将Git的一些概念做一个介绍,然后对在使用Git过程中常用的命令做一个深入的解释,所谓知其然知其所以然。
Git是Linux之父Linus的第二个伟大的作品(第一个大家都懂的)。在Git出现之前,SVN占据了版本控制系统的半壁江山,而Git与SVN的最大的区别可以概括为以下几点:
- Git是分布式版本控制系统,而SVN是集中式的。分布式与集中式的最大区别在于不需要集中式的版本库,每个人都可以工作在通过克隆建立的本地版本库中。换言之,每个人都具有一个完整的版本库
- Git版本库的是按照元数据存储的,而SVN则是按照文件存储。具体而言就是,通过Git克隆的本地版本库下的.git目录只会存储元数据,而SVN仓库下的.svn目录会包含原始文件的拷贝
- Git的版本号的全球唯一的哦。Git使用了SHA-1(40个十六进制数字)算法保证了版本号的全球唯一,Linus指出使用SHA-1算法的目的是保证数据的完整性。理论上对其进行哈希碰撞(hash collision,不同的两块数据有相同的hash值)的攻击可以在2^51(2的51次方)左右的次数内实现。也就是两个版本号冲突的几率是1/2^51
Git除了以上与SVN的巨大不同外,还具有以下的闪亮特性,这也是我学习Git的理由。学好Git,受用终身。
工作备份
代码备份也许是多数人使用Git的理由,其实除了代码备份外,Git还可以备份其他文件。在进行工作备份的时候,我们需要的仅仅是执行以下简单的代码:
git add . # 这两个命令可以将本地的修改提交给本地仓库
git commit
git push # git push命令把本地仓库的修改更新到远程仓库
异地协同工作
我觉得这是另一个Git的优秀特性,比如在学校的机房将工作成果完成了工作备份,在宿舍就可以通过一个命令git pull
把工作成果同步到本地,如果又进行了其他的修改,那么只需要git push
就可以重新将新的工作成果备份到远程的版本库中。
现场版本控制
在使用Git的时候,完全可能在工作完成一部分的时候发生了意外,如果需要对目前的工作成果进行保存,使用git tag
命令就可以轻松完成。tag的意思就是标签,在Git中则理解为里程碑。无论工作进行到哪里了,都可以使用git tag
标记项目的里程碑。也可以回退到指定到的里程碑上。
吃后悔药很简单
在Git中提供了很多反悔的操作,所以把Git理解为“时光穿梭机”也不为过。可以使用诸如git rm
、git commit --amend
、git rebase
等操作就可以轻易实现反悔操作。
更好用的差异比较
Git提供了功能丰富的差异比较命令,Git支持的差异比较除了支持基于行的差异比较外,还支持行内逐字的比较。在Git中实现差异比较只需要使用git diff
命令就可以各种类型的差异比较。