认识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 rmgit commit --amendgit rebase等操作就可以轻易实现反悔操作。


更好用的差异比较

Git提供了功能丰富的差异比较命令,Git支持的差异比较除了支持基于行的差异比较外,还支持行内逐字的比较。在Git中实现差异比较只需要使用git diff命令就可以各种类型的差异比较。

Logo

更多推荐