Git是一个免费的、开源的分布式版本控制系统,可以用于记录一个或者若干个文件内容的变化,方便查阅或者修改。
Git官网:https://git-scm.com/
1、常见的版本控制系统
1.1、集中式版本控制系统(SVN、CVS、perforce)
集中式版本控制系统的示意图如下:
特点:
1)一定会有一个中央服务器;
2)优点在于所有用户都可以看到最新更新的文件或者记录,管理员也很方便掌握每个人的权限;
3)缺点是如果中央服务器出故障的时候,所有用户都不能进行上传、下载、更新等;
1.2、分布式版本控制系统(Git、BitKeeper)
分布式版本控制系统的示意图如下:
每个客户端都有备份和记录,大家都可以查看到版本记录和修改以后的记录。
分布式版本控制系统存放的不是版本与版本之间的差异,而是版本的索引。
2、Git的工作区、暂存区、版本库
使用Git时对其工作区、暂存区和版本库这三个的概念是很有必要了解的,了解这三个概念有助于对Git的工作过程有一个比较明确的认知。
那这三个概念都是些什么意思呢?
1)工作区:
就是在电脑上能看到的目录或者文件。简单而言就是你的本地文件。
2)暂存区(stage 或 index):
一般存放在 .git 目录下的 index 文件(.git/index)中,所以也可以把暂存区叫作索引(index)。
3)版本库:
工作区中有一个隐藏目录.git,这个不算工作区,而是 Git 的版本库。
工作区、版本库中的暂存区和版本库之间的关系如下图所示:
上图中左侧为工作区,右侧为版本库。在版本库中标记为 "index" 的区域是暂存区(stage/index),标记为 "master" 的是 master 分支所代表的目录树。
上图中可以看到,此时 "HEAD" 实际是指向 master 分支的一个"指针"。所以图中的命令中出现 HEAD 的地方是可以用 master 来替换。
上图中的 objects 标识的区域为 Git 的对象库,位于 ".git/objects" 目录下,里面包含了创建的各种对象及内容。
2.1、一些指令执行时所存在的关联
2.1.1、向暂存区追加文件。
git add xxx
使用 git add 命令时,是对工作区修改(或新增)的文件进行操作的,会将暂存区的目录树更新。
同时,工作区修改(或新增)的文件内容会被写入到对象库中的一个新的对象中,而该对象的ID被记录在暂存区的文件索引中。
2.1.2、暂存区文件上传版本库。
git commit -m "描述"
当执行提交操作 git commit 时,会将暂存区的目录树写到版本库中,master 分支会做相应的更新。即 master 指向的目录树就是提交时暂存区的目录树。
2.1.3、版本回退。
git reset HEAD
当执行 git reset HEAD 命令时,暂存区的目录树会被重写,被 master 分支指向的目录树所替换,但是工作区不受影响。
2.1.4、删除文件。
git rm --cached <file>
当执行 git rm --cached 命令时,会直接从暂存区删除文件,工作区则不做出改变。
2.1.5、检出文件
git checkout . 或 git checkout -- <file>
当执行 git checkout . 会用暂存区全部的文件替换工作区的文件。或者 git checkout -- 命令时,会用暂存区指定的文件替换工作区的文件。这个操作是很危险,会清除工作区中未添加到暂存区的改动。
git checkout HEAD . 或者 git checkout HEAD <file>
当执行 git checkout HEAD . 会用 HEAD 指向的 master 分支中的全部文件替换暂存区和以及工作区中的文件。或者 git checkout HEAD 命令时,会用 HEAD 指向的 master 分支中的部分文件替换暂存区和以及工作区中的文件。这个命令也是极具危险性的,因为不但会清除工作区中未提交的改动,也会清除暂存区中未提交的改动。
3、代码托管中心
除了本地库可以保存版本的信息以外,为了更加方便使用,可以在代码托管平台中创建远程库,将本地库和远程库建立连接,实现远程协同的开发。它的好处有:
1)方便团队内部合作开发项目、共同项目管理;
2)方便跨团队之间的项目开发合作,使得不同公司、组织之间的合作开发可以方便的进行。
4、Git的工作流程
Git的工作流程可以归纳如下图所示:
总的来说:Git是一个很方便的代码托管平台,使用者可以在远程服务器上建立属于自己的项目资源管理库,实现远程和本地的资源同步,本地添加、修改的文件可以及时更新到远程服务器上保存管理。同时也可以便利于多人协作开发,及时更新最新的资源库文件当本地的工作区,及时知晓最新的更新进度,加快开发的进度。