Git是目前世界上最先进的分布式版本控制系统(没有之一)
为什么会有版本控制系统?
大家在写论文的时候,都会碰到这样一个头疼的问题:在论文反复的修改过程中,你的电脑桌面上会有很多个论文版本,想删掉一些,但又怕哪天突然会用到,只好作罢。尤其是,当你把论文交给老师或者同学修改,若干天后,他们把改后的文章发回来,但是这期间你自己也做了一些改动,这时候你还需要自己手动把这些改动合并,基于手动管理多个版本的这种不便性,版本控制系统应运而生。
分布式和集中式版本控制系统有何区别
集中式版本控制系统,常见的有CVS和SVN,其版本库是集中存放在中央服务器的,工作的时候用的都是自己的电脑,所以要先从中央服务器取得最新的版本,然后开始工作,之后,再把自己的工作推送给中央服务器。
分布式版本控制系统根本没有“中央服务器”,每个人的电脑上都是一个完整的版本库,虽然系统通常也有一台充当“中央服务器”的电脑,但这个服务器的作用仅仅是用来方便“交换”大家的修改,没有它大家也一样工作,只是交换修改不方便而已。
简而言之,分布式与集中式的区别有:
- 集中式版本控制系统必须联网才能工作,而分布式不必联网;
- 集中式版本控制系统的中央服务器如果出了问题,所有人都没法干活,而在分布式中,如果github挂了可以重新建一个服务器,然后把任何一个人的仓库clone过去,因为分布式版本控制的每个节点都是完整仓库;
安装git
在Ubuntu上安装git非常简单,只需要下面一条命令足以
sudo apt-get install git
如果是别的系统,可以参照安装git.
git的基本操作
- 配置git上的用户名和邮箱
git config --global user.name "用户名"
git config --global user.email "邮箱"
需要注意的是,git config命令的--global参数,用了这个参数,表示你这台机器上所有的Git仓库都会使用这个配置。
- 创建版本库
第一步,先创建一个空目录
mkdir feilon
cd feilon
第二步,通过git init命令把这个目录变成Git可以管理的仓库
git init
- 把文件添加到版本库
git add readme.tet
commit -m "wrote a readme file"
其中git commit命令中-m后面输入的是本次提交的说明,这样就能从历史记录里方便地找到改动记录。
Git添加文件需要add和commit两步,是因为commit可以一次提交很多文件,所以你可以多次add不同的文件。
- 查看仓库的状态
git status
git status命令可以让我们时刻掌握仓库当前的状态,如果git status告诉我们有文件被修改过,此时可以用git diff查看具体的修改内容。
- 创建与删除分支
首先,我们创建miao分支,然后切换到miao分支:
git checkout -b miao
git checkout命令加上-b参数表示创建并切换,相当于以下两条命令:
git branch miao
git checkout miao
删除分支miao的命令如下
git branch -d miao
-
添加远程库
第一步,需要在GitHub上创建一个与本地git仓库同名的git仓库;
第二步,关联远程库,在GitHub上创建好一个新仓库后,会出现如下页面:
我们注意到,GitHub给出的地址不止一个,实际上,Git支持多种协议,可以使用ssh,也可以使用https,但通过ssh支持的原生git协议速度最快。
在本地仓库下运行如下命令,二选一即可:
git remote add origin https://github.com/zmfl121314/feilon.git
或者
git remote add origin git@github.com:zmfl121314/feilon.git
第三步,把当前分支master推送到远程
git push -u origin master
由于远程库是空的,第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令为:
git push origin master
- 从远程库克隆
第一步,先创建远程库;
第二步,从远程库克隆到本地,同样的,在本地仓库下运行如下命令,二选一即可:
git clone git@github.com:zmfl121314/feilon.git
或者
git clone https://github.com/zmfl121314/feilon.git