相关文档链接:https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000
集中式版本控制系统(SVN,CVS):速度慢,必须联网才能使用。其中CVS是作为最早的开源而且免费的集中式版本控制系统,直到现在用的人不在少数;但是由于CVS自身设计问题,会造成提交文件不完整,版本库莫名其妙损坏的情况;同样是开源而且免费的SVN修正了这一稳定性问题,是目前用得最多的集中式版本库控制系统。分布式版本控制系统(Git):安全性更高,不需要联网等以及强大的分支管理(远超与SVN)
理解集中式控制系统和分布式的区别:
集中式控制系统:版本库是集中放在中央服务器的,然后干活的时候,用的是自己的电脑,所以要先从中央服务器取到最新的版本,干完活,再推送上去;反之如果中央服务器出了问题,所以人就无法干活了。
分布式版本控制系统:没有"中央服务器",每个人的电脑上都是一个完整的版本库,所以在多人协助的时候,只需要将自己修改的推送上去,就可以相互看到对方的修改了。但在实际使用的时候,通常是有一台电脑充当"中央服务器"作用,不过仅仅只是作为交换修改的作用,没有也可以一样的工作。
安装Git:因为最早Git是在Linux上开发的,后来才慢慢地有人把它移植到了Windows上的。如果要学习Git在Linux的安装可以查看上面的文档,这一次的学习主要是针对windows系统。
下载安装程序:https://git-scm.com/downloads,然后按默认选项安装即可。
安装完成后,点击鼠标右键找到“Git”->“Git Bash”,弹出一个类似命令行窗口的东西,就说明Git安装成功!
安装成功之后,还需要最后一步设置,在命令行输入:
注意git config命令的- -global参数,用了这个参数,表示你这台机器上所有的Git仓库都会使用这个配置,当然也可以对某个仓库指定不同的用户名和Email地址。
创建版本库:版本库又名仓库,英文名repository;您可以理解为一个目录,这个目录下的所有文件都将被git管理起来,不论是删除、修改,还是在未来某个时刻还原。
所以,创建一个版本库非常简单,首先,选择一个合适的地方,创建一个空目录。
切记目录名不能包含中文!!!
第二步:通过git init 命令把这个目录变成git可以管理的仓库:
这个时候你会发现在仓库目录下出现了一个.git文件,这个文件是GIT来管理版本库的,没事不要手动修改或删除,以免将GIT仓库给破坏了。
如果您没有看到这个目录,那是因为这个目录默认隐藏的,用ls -ah
命令就可以看见。
使用windows时请注意建议你下载notepad++(https://notepad-plus-plus.org/)代替记事本,记得将编码设置成UTF-8。
言归正传,我们编写一个aaa.text文件,内容如下:
Git is a version control system.
Git is free software.
把一个文件放到Git仓库只需要两步:
工作区和暂存区:
Git和其他版本控制系统如SVN的一个不同之处就是有暂存区的概念。
工作区(Working Directory)
就是你在电脑里能看到的目录,比如我的learngit
文件夹就是一个工作区:
版本库(Repository)
作区有一个隐藏目录.git
,这个不算工作区,而是Git的版本库。
Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master
,以及指向master
的一个指针叫HEAD
。
前面我们提到的git add是把文件修改提交到暂存区,git commit 就是把所有暂存区的东西提交到当前分支。
因为我们创建Git版本库时,Git自动为我们创建了唯一一个master
分支,所以,现在,git commit
就是往master
分支上提交更改。
管理修改
比如说:
第一次修改 -> git add
-> 第二次修改 -> git commit
这个时候你git status的时候提示你第一次的修改只是放在暂存区,并未提交。如果要查看工作区和版本库里面最新版本的区别(可以使用git diff HEAD -- aaa.txt
命令):
撤销修改
方法一:
可以手动恢复到上一个版本的状态,也可以通过git status查看差异,git有个命令可以丢弃工作区的修改(将所有工作区的修改全部撤销):
git checkout -- aaa.txt
一种是readme.txt
自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;
一种是readme.txt
已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。
总之,就是让这个文件回到最近一次git commit
或git add
时的状态。
方法二:
也可以通过git reset HEAD <file>
可以把暂存区的修改撤销掉(unstage),重新放回工作区(git reset不光可以回退版本,也可以把暂存区的修改回退到工作区,我们用HEAD
时,表示最新的版本)。
删除文件
同上,可以手动删除,或者用rm
命令删了:
rm aaa.txt
当你删除了工作区的文件之后,这个时候工作区的文件就和版本库不一样了;git status
命令会立刻告诉你哪些文件被删除了。
现在有两种方法,一是从版本库张删除该文件,用命令git rm
删掉,并且git commit:
现在,文件就从版本库中被删除了。
另一种情况是删错了,因为版本库里还有呢,所以可以很轻松地把误删的文件恢复到最新版本:
git checkout -- test.txt
分支管理
其他版本控制系统如SVN等都有分支管理,但是用过之后你会发现,这些版本控制系统创建和切换分支比蜗牛还慢,简直让人无法忍受,结果分支功能成了摆设,大家都不去用。