【工具使用】----版本控制系统Git
前言
最近小编加入了公司的一个新的项目组,在此项目组中管理项目代码用到了git管理,原来小编也用过svn,那么这个时候问题就来了,既然这两个工具都是版本控制系统,那么到底什么是GIt呢,以及Git和svn两者之间都有啥区别呢?
叙述
What
Git
Git是一个开源的分布式版本控制系统,可以有效、高速的处理从很小到非常大的项目版本管理。Git不仅仅是个版本控制系统,它也是个内容管理系统(CMS),工作管理系统等。
SVN
SVN(Subversion)是集中式管理的版本控制系统。
Git VS SVN
概念区别
SVN是集中式的版本控制系统,而Git是分布式版本控制系统,集中式和分布式版本控制系统有什么区别呢?
先说集中式版本控制系统,版本库是集中存放在*服务器的,而干活的时候,用的都是自己的电脑,所以要先从*服务器取得最新的版本,然后开始干活,干完活了,再把自己的活推送给*服务器。*服务器就好比是一个图书馆,你要改一本书,必须先从图书馆借出来,然后回到家自己改,改完了,再放回图书馆。
集中式版本控制系统最大的毛病就是必须联网才能工作,如果在局域网内还好,带宽够大,速度够快,可如果在互联网上,遇到网速慢的话,可能提交一个10M的文件就需要5分钟,这还不得把人给憋死啊。
那分布式版本控制系统与集中式版本控制系统有何不同呢?首先,分布式版本控制系统根本没有“*服务器”,每个人的电脑上都是一个完整的版本库,这样,你工作的时候,就不需要联网了,因为版本库就在你自己的电脑上。既然每个人电脑上都有一个完整的版本库,那多个人如何协作呢?比方说你在自己电脑上改了文件A,你的同事也在他的电脑上改了文件A,这时,你们俩之间只需把各自的修改推送给对方,就可以互相看到对方的修改了。
和集中式版本控制系统相比,分布式版本控制系统的安全性要高很多,因为每个人电脑里都有完整的版本库,某一个人的电脑坏掉了不要紧,随便从其他人那里复制一个就可以了。而集中式版本控制系统的*服务器要是出了问题,所有人都没法干活了。
在实际使用分布式版本控制系统的时候,其实很少在两人之间的电脑上推送版本库的修改,因为可能你们俩不在一个局域网内,两台电脑互相访问不了,也可能今天你的同事病了,他的电脑压根没有开机。因此,分布式版本控制系统通常也有一台充当“*服务器”的电脑,但这个服务器的作用仅仅是用来方便“交换”大家的修改,没有它大家也一样干活,只是交换修改不方便而已。
再通过他们对待数据的方法上来看一下这两者之间的区别?
SVN
以文件变更列表的方式存储信息。 这类系统(CVS、Subversion、Perforce、Bazaar 等等)将它们保存的信息看作是一组基本文件和每个文件随时间逐步累积的差异。存储每个文件与初始版本的差异。
Git
Git把数据看作是对小型文件系统的一组快照。 每次你提交更新,或在 Git 中保存项目状态时,它主要对当时的全部文件制作一个快照并保存这个快照的索引。为了高效,如果文件没有修改,Git 不再重新存储该文件,而是只保留一个链接指向之前存储的文件。 Git 对待数据更像是一个快照流。
关于操作方面的区别
SVN:在实际的操作中,SVN是直接在按钮上进行操作的,在你提交(commit)项目之前,一定要先对项目进行更新(update)
Git:Git的一切操作都是通过命令完成的。来看一下Git经常使用的命令。
一般来说,日常使用只要记住下图6个命令,就可以了。
注:Workspace:工作区 Index/Stage:暂存区 Repository:仓库区(或本地仓库) Remote:远程仓库
1、git add . # 添加当前目录的所有文件到暂存区
2、git commit -m [message] # 提交暂存区到仓库区
3、git status # 显示工作目录和暂存区的状态,使用此命令能看到那些修改被暂存到了, 哪些没有, 哪些文件没有被Git tracked到
4、git log # 显示当前分支的版本历史
5、git diff # 显示暂存区和工作区的差异
6、git checkout . # 恢复暂存区的所有文件到工作区
7、git stash #暂时将未提交的变化移除,稍后再移入
8、git help #命令显示有关Git的帮助信息。
9、git init #命令创建一个空的Git仓库或重新初始化一个现有仓库。
10、git reset #命令用于将当前HEAD复位到指定状态。一般用于撤消之前的一些操作(如:git add,git commit等)。
11、git checkout #命令用于切换分支或恢复工作树文件
12、git show #命令用于显示各种类型的对象。
13、git clone #将存储库克隆到新目录中,作为本地仓库
14、git push #用于将本地分支的更新,推送到远程主机
15、git pull #用于从另一个存储库或本地分支获取并集成(整合)。git pull命令的作用是:取回远程主机某个分支的更新,再与本地的指定分支合并,它的完整格式稍稍有点复杂。
版本号上区别
Git没有一个全局版本号,而SVN有:目前为止这是跟SVN相比Git缺少的最大的一个特征
分支上区别
分支在SVN中一点不特别,就是版本库中的另外的一个目录。如果你想知道是否合并了一个分支,你需要手工运行像这样的命令svn propget svn:mergeinfo,来确认代码是否被合并。 然而,处理GIT的分支却是相当的简单和有趣。
Git鼓励分Branch,理GIT的分支却是相当的简单和有趣。你可以从同一个工作目录下快速的在几个分支间切换。你很容易发现未被合并的分支,你能简单而快捷的合并这些文件。
小结
工欲善其事必先利其器,学会使用工具,一定会达到事半功倍的效果。
小链接:
http://www.ruanyifeng.com/blog/2015/12/git-cheat-sheet.html
https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000