前言
- 因为工作中目前要大量使用 Git,虽然之前已经会用了,但没有系统的总结过,现在来重新总结
- 概念篇会直接搬网上的教程,比如:菜鸟、廖雪峰、老张、中文版Git,就不再花时间自己总结过概念了
Git 是什么?
- Git是目前世界上最先进的分布式版本控制系统(没有之一),用于敏捷高效地处理任何或小或大的项目
- Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件
- Git 与常用的版本控制工具 CVS, Subversion 等不同,它采用了分布式版本库的方式,不必服务器端软件支持
什么是集中式版本控制系统?
- 版本库是集中存放在中央服务器的
- 而干活的时候,用的都是自己的电脑,所以要先从中央服务器取得最新的版本,然后开始干活
- 干完活了,再把自己的活推送给中央服务器
- 中央服务器就好比是一个图书馆,你要改一本书,必须先从图书馆借出来,然后回到家自己改,改完了,再放回图书馆
缺点
- 集中式版本控制系统最大的毛病就是必须联网才能工作
- 如果在局域网内还好,带宽够大,速度够快
- 可如果在互联网上,遇到网速慢的话,可能提交一个10M的文件就需要5分钟,体验极其不好
什么是分布式版本控制系统?
- 分布式版本控制系统根本没有“中央服务器”,每个人的电脑上都是一个完整的版本库,就不需要联网了
- Git 这种系统,客户端并不只提取最新版本的文件快照, 而是把代码仓库完整地镜像下来,包括完整的历史记录
- 那任何一处协同工作用的服务器发生故障,事后都可以用任何一个镜像出来的本地仓库恢复, 因为每一次的克隆操作,实际上都是一次对代码仓库的完整备份
- 它还以指定和若干不同的远端代码仓库进行交互,因此你就可以在同一个项目中,分别和不同工作小组的人相互协作,可以根据需要设定不同的协作流程
Git 和 SVN 的区别
-
Git 是分布式的,SVN 不是:这是 Git 和其它非分布式的版本控制系统,例如 SVN,CVS 等,最核心的区别
-
Git 把内容按元数据方式存储,而 SVN 是按文件:所有的资源控制系统都是把文件的元信息隐藏在一个类似 .svn、.cvs 等的文件夹里
-
Git 分支和 SVN 的分支不同:分支在 SVN 中一点都不特别,其实它就是版本库中的另外一个目录
-
Git 没有一个全局的版本号,而 SVN 有:目前为止这是跟 SVN 相比 Git 缺少的最大的一个特征
-
Git 的内容完整性要优于 SVN:Git 的内容存储使用的是 SHA-1 哈希算法。这能确保代码内容的完整性,确保在遇到磁盘故障和网络问题时降低对版本库的破坏
Git 的工作流程