开源的代码版本控制工具Git的应用以及其命令整理
Git是一个开源的分布式版本控制系统,可以有效、高速的进行较大或者较小的项目版本管理,起初是LinusTovalds为了管理Linux内核开发而开发的一个版本控制软件。
本篇文章介绍Git的控制命令为目的逐步深入挖掘Git的更多用途
1、Git的分布式
Git是一个分布式的,但是现存的版本控制工具不止Git,还有集中式的svn和cvs;首先我们要搞清楚集中式以及分布式的区别,集中式的版本管理,大家共用一个中央服务器,每个工作开始前都需要去中央服务器去拉取代码,工作结束后推送到中央服务器;并且有一个极大地缺陷,必须联网才能工作;在目前这个时代,移动办公、出差等工作方式,对程序员来说,集中式的版本控制是及其不友好的。而Git的代表的分布式版本控制工具完美的解决了这个问题,分布式版本控制中,每个项目的参与人员都可以独立工作,共同完成项目,也存在一个中央服务器,这个服务器的存在是为了同步和拉取每个人的的版本,相比之下,分布式较之集中式;安全性更高,更具有灵活性,并且多了分支的概念。
2、Git中的一些基本概念
2.1、版本库(Repository)
版本库也是存放代码的仓库,在这个仓库里面做所有的操作以及文件都会被Git跟踪,目的就是创建历史记录。
创建仓库首先选择一个空的目录,再通过命令:
$ git init (
初始化仓库
)
该命令执行后将会在该目录中创建一个版本库,并且会创建一个.git的隐藏目录,这个目录中存放的就是管理版本库的信息数据的文件;没事千万别动这个文件,除非你想清除这个仓库。
初始化仓库以后我们就要往这个仓库中存放东西了,而存放文件的则要分成两部分,第一步存放到暂存区:
$ git add 文件名 (
该命令将工作区中单个文件放入暂存区
)
这里工作区是 .git所在的目录 ;但是如果有很多文件需要放入暂存区像这样单个的命令将会是一个噩梦,所以可以通过:
$ git add .(
将工作区中的所有文件放入暂存区
)
第二步使用命令保存到仓库中,同时附带保存的备注信息,其命令如下:
$ git commit -m “提交说明”(
将暂存区的数据存放到仓库并且附加提交说明
)
-m后面的这个提交说明是不能少的,这样更便于其他人了解到这次提交的改动。
经过这两个步骤,代码才会被放入仓库,假如你修改了已经放入仓库中的文件或者忘记了是否将新建的文件进行 add,这个时候可以通过:
$ git status(
显示工作目录和暂存区的状态
)
该命令执行后,命令行上面部分显示的是工作区中的文件状态,若文件名呈 红色
状态,则代表文件被更改或者没有add,若文件名为
绿
色
\color{#00FF00}绿色
绿色,则代表文件没有更改或已经add。
2.2、分支的管理以及创建
Git中的分支我们可以把它理解成操作系统中的线程,一个仓库比喻成进程,一个进程可以有很多的线程,其中Git分支中master分支是主分支也是默认分支,一个版本库可以拥有很多分支,为什么要提出分支的概念呢,由于项目开发中,有较多的人员参与,不可能每个人都使用主分支,所以采用多分支的概念,一个项目参与人员,拥有一个独立的分支,用来将自己的部分推送到版本库中,再由负责人来使用主分支来合并所有人的代码,并解决冲突问题。下面列出分支操作的命令;
$ git branch dev (
新建立一个dev的分支
)
$ git checkout dev (切换到dev分支
)
但是这样太麻烦了,我们可以通过:
$ git checkout -b dev (
新建并且切换到dev分支
)
加入 - b参数代表创建并切换,一旦分支切换多了,而你刚好忘记了自己刚刚创建的那个分支叫啥了,这个时候我们可一通过:
$ git branch (
显示所有的分支
)
查看所有分支,并且当前的分支前面会带有 *
标志,这样是不是方便得多的多。
2.3、代码合并以及冲突
在开发项目的过程中,团队结束了一天的工作,这个时候老大就可以去查看团队成员的工作成果,那么老大现在就要将每个人的分支统统合并,并且要看看哪个二五仔今天的代码没写完,Git命令中合并分支,也叫合并代码,即通过:
$git merge dev (
将当前分支与dev分支进行合并
)
这个时候我们需要注意,老大所处的位置,由于我们开发时,每个人的分支都是不同的,并且都不会采用master分支,这个分支就是给老大合并代码使用的,所以刚刚的命令就相当于合并master分支和dev分支;可是,老大合并完代码后发现使用dev分支的小弟写的代码相当烂,并且产生了冲突,冲突如下:
<<<<<<< HEAD
Boss is a superman!
=======
Boss is a big SB!
>>>>>>> dev
其中Git采用 <<<<<<<
,=======
,>>>>>>>
来分隔不同的分支的内容;
老大看完冲突,默默的将dev分支写的语句冲突删除;解决冲突后,老大相当不爽,他执行了一条命令:
$ git branch -d dev (
删除dev分支
)
执行完以后并让人事通知使用dev分支的小弟,明天不用来上班了;老大使用 - d 参数就直接delete
了dev。