Git 是一个版本控制系统,用来跟踪计算机文件的变更,并且可以让多人在这些文件上进行协同作用。它主要用来对源代码的管理,但是它也可以用来管理任何类型的文件!
传闻,Git 是由 Linus Torvalds 使用两个星期开发出来的。一些伟大的网站是基于 Git 的基础来实现的,比如 github.com、gitlab。
我在 14 年就有初步的了解和使用过 Git 了,不过当时的项目只有我自己一个人在开发,只是在本地管理使用 Git 来管理代码,连远程仓库都没有使用到,因为当时并不需要远程仓库也能很好地运作了。
今年公司开发人员增加,之前的代码管理方式(所有人共同编辑局域网中文件服务器上的代码,然后 FTP 上传到服务器)明显地不能很好地运作了。这才考虑使用版本控制器,我这才有机会再次学习和使用 Git 。
在我看来,一个新手只要理解了 Git 的以下知识点,就能够很好地使用 Git 进行日常的代码管理工作了。一个是 Git 仓库中的文件状态,一个是 Git 分支的理解,还有就是一些常用的命令。
工作目录中文件的状态
有几个名词需要明确一下:
工作目录:项目文件的跟目录,也是保存 .git 文件夹的地方
Git 仓库:在工作目录中执行 git init 之后,会生成一个 Git 仓库;直接 git clone 下来的项目会自带有 Git 仓库。
Git 仓库可以说是工作目录的一个子集,因为在工作目录里的文件不一定都在 Git 仓库中,但是在 Git 仓库中的文件就一定在工作目录中的。
在工作目录中的文件可以分为两种状态,一个是未跟踪的,另一个是已跟踪的。是否跟踪的划分是指是否纳入 Git 仓库进行版本控制管理,没有纳入 Git 仓库管理的文件状态是显示未跟踪的,反之则是已跟踪的。
在 Git 仓库中的文件也有三种状态,一种是未修改的,一种是已修改的,还有一种是已暂存的。刚提交过后的文件在 Git 仓库中的状态是未修改的,这表明在上次提交之后,该文件没有作过任何变更;在未修改的状态下变更文件,则该文件会变成已修改的状态;在已修改和未修改的状态中间还有一个过渡的区域,叫做暂存区,在这个区域的文件状态叫做已暂存。
工作目录中这些文件的状态是可以相互转换的,以下图片可以清晰地看到这一点:
分支的创建与合并
分支是使得 Git 如此强大的原因之一。关于 Git 的分支,网络上大部分的文章都在将它的实现原理,在此,我只是描述一下 Git 分支给人的一个简单的直观的印象,若是想对分支有更深刻的了解,可以参考网上的文章。
分支,从字面上的理解就是分出一条支路。Git 分支也大概可以这么理解,从一个提交线路中分出另一个提交线路。
请看下图:
假设大写 A、B、C、D、E、F 分别表示六次提交,而 b1、b2 和 b3 分别表示三个分支。
可以看得出来,Git 仓库从提交 A 开始分出了两个分支 b1 和 b2 ,在提交 A 的基础上,b1 分支删除了三行数据,变成了提交 C;而 b2 分支在一个文件中添加三行数据,在另一个文件中添加两行和删除两行数据,变成了提交 B。这就形成了两个分支。
提交 D 是分支 b1 和分支 b2 的合并,合并的结果是将提交 B 与提交 C 的操作合并到一起,即一个文件添加了三行数据,另一个删除了三行,还有一个是添加两行和删除两行数据。就是是合并了。
同样,到提交 F 也是一样的道理。
当然,从一个提交中是可以创建很多个分支的,这和创建两个分支是一样的道理,这里也就不在啰嗦了 ...
一些常用命令
git init :初始化一个 Git 仓库
git clone:克隆一个远程仓库
git add :添加文件到仓库管理或者添加文件到暂存区
git pull:拉取远程仓库的提交到本地仓库
git push:推送本地的提交到远程仓库
git branch:Git 分支的操作命令
git merge:合并分支
git checkout:切换分支
git revert:撤销分支
git reset:回滚分支
这些命令具体的用法会因携带的选项参数的不同而具有不同的功能。
总结
Git 的功能远不止于此,在熟悉了基本的操作之后,可以往更深的方向去学习。比如可以研究下 Git 的远程仓库的搭建,代码自动部署的配置,分布式工作流的实现。当然也可以去了解 Git 的内部原理或者有能力者为 Git 贡献自己的代码 ...
本文作者: chenishr
本文标题:《初识 Git 版本控制器》
本文地址: http://blog.chenishr.com/?p=586
©版权所有,除非注明, 永在路上文章均为原创,转载请以链接形式注明出处和作者细信息。