Git 是目前最为强大的版本控制工具,无论是个人还是团队使用都非常的方便,使我们提高效率的一大利器;“工欲善其事必先利其器”,掌握先进的工具,比仓促出发,磕磕绊绊更加有利;
本文是 Git 系列的第一篇,主要介绍 Git 的基本原理,以及配置 欢迎关注公众号【前沿AI】
一、集中式版本控制 vs 分布式版本控制
Git 是分布式的版本控制工具;
1)集中式版本控制
集中式版本控制实际上是版本库集中存放在中央服务器中,个人电脑不包含版本库的修改记录【即只包含当前的修改,没有任何历史版本】;
这样,工作的时候需要从版本库中获取最新的代码;工作工作结束后,需要将本地代码推送到中央服务器;
但是这种方法存在很严重的缺点:
- 安全系数低:因为版本是集中存放的,所以一旦中央服务器出现问题,那么所有的历史版本将会丢失;
- 因为本地没有历史版本,所以集中式版本控制必须联网才能工作;就是需要经常地从中央服务器拉取代码或者推送到中央服务器,如果网速很慢,就很浪费时间;
2)分布式版本控制
分布式版本控制的特点是没有中央服务器,每一台电脑都包含所有的历史版本;当两个人或者多个人合作的时候,只需要将自己的修改推送给对方就可以;
如果两个人在同一个分支(后面会讲到),修改了同一个文件,Git 会自动进行合并,当合并产生冲突而不能解决的时候,通常可以使用外部合并工具,如 BeyondCompare ,来解决;
分布式版本控制的优势:
- 不需要联网:自己的电脑就有所有的历史版本,当自己修改结束以后,直接修改自己本地的版本库即可;当多人合作的时候,隔一段时间相互推送即可;
- 不必担心历史版本丢失:因为每个人电脑中都包含所有的历史版本,因此,只要不是所有人的历史版本都丢失了,其他人只要从未丢失的人那里复制一份即可;
但是,实际使用中,如果很多人之间相互推送也是比较麻烦的,所以会选择一台服务器作为“虚拟中央服务器”,所有都从这个“中央服务器”拉取历史版本,然后所有人的修改都推送到“中央服务器”;
这样做并不是变成了集中式版本控制,只是为了当合作者比较多的时候,交换代码比较方便。比如,我们通常使用 GitLab 作为“虚拟中央服务器”,或者说远程仓库,但是没有这个“中央服务器”同样可以工作,只是比较麻烦
二、Git 原理
Git 中文件可能处于下面三个状态之一:已修改(modified)、已暂存(staged)、已提交(committed)
对应于这三种状态 Git 项目会有三个阶段:工作区(working directory)、暂存区(Staging Area)、版本库(.git directory / Repository);
这里讲的版本库是本地版本库,还有一个远程版本库,就是我们上一节中讲到的为了交换代码的方便而配置的“远程服务器”
1) 三个基本状态的理解:
- 已修改:对文件进行了修改,但是还没有保存到数据库中;处于已修改状态的文件位于工作区
- 已暂存:对一个已修改的文件的当前版本做了标记,这样它就包含在下次提交的快照中;处于已暂存状态的文件位于暂存区;
- 已提交:数据已经安全地保存在本地数据库中;处于已提交状态的文件位于版本库;
2) 三个阶段的理解:
- 工作区:对文件的任何修改都在工作区;更专业的说法是:将某一个历史版本从 Git 仓库的压缩数据中提取出来,放在磁盘上供使用修改;
- 暂存区:凡是使用 git add 命令操作后的文件处于暂存区;实际上暂存区是一个文件,保存了下次将要提交的文件列表信息;
- 版本库:凡是使用 git commit 命令操作之后的文件都存放在版本库;这里是 Git 用来保存项目的元数据和对象数据库的地方,是最重要的部分;
三、Git 的安装与配置
Ubuntu 系统:
sudo apt install git-all
Windows 系统: 官网地址
配置:
每一台计算机上只需要配置一次 Git 即可
1) 相关配置文件的理解
/etc/gitconfig 文件:包含系统上每一个用户以及仓库的通用配置;执行 git config 时加上 --system 选项会读写这个文件中的内容【需要 root 权限】~/.gitconfig 或者 ~/.config/git/config 文件:只包含当前用户的配置信息;执行 git config 时加上 --global 选项会读写这个文件中的内容;.git/config 文件:只针对当前仓库的配置;当进入某一个 Git 仓库时候,执行 git config 默认是读写这个文件夹;
2) 配置用户信息
安装 Git 之后第一步就是设置用户名和邮箱信息,因为每一个 Git 提交都会使用这个信息:
git config --global user.name "your_name"
git config --global user.email "your_email"
git config user.email "you@example.com"
git config user.name "Your Name"
当想要针对不同的项目使用不同的用户名和邮箱时候,只需要修改当前项目下的配置文件即可;
3) 检查配置信息
git config --list
|