Git 食用方法
1.简介
Git 是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。
相信很多同学抄作业写作业的时候多多少少都见过git clone xxx
这样的命令,这也算与Git
结识的一个奇怪方式?
值得一提的是,Git 是由Linux内核大爹Linus开发的。更多的简介的就不多提了,感兴趣可以去看更多大佬的科普文章。
2.Git 安装
I.Windows平台安装
首先到官网下载Git的安装包:https://gitforwindows.org/
如果官网慢,可以用国内的镜像:https://npm.taobao.org/mirrors/git-for-windows/
下载完成后安装,如果无特殊需求,可以一路无脑点到底。
II.Debian系安装
一般来说,应该系统都会自带Git。但如果没有的话就自己安装一下:
$ sudo apt-get install libcurl4-gnutls-dev libexpat1-dev gettext libz-dev libssl-dev
$ sudo apt-get install git
$ git --version
III.RedHat系安装
$ sudo yum install -y libcurl4-gnutls-dev libexpat1-dev gettext libz-dev libssl-dev
$ sudo yum install -y git
$ git --version
3.Git 基础配置
在安装好Git后,你并不能直接使用他(如果只要clone
的话除外),而是需要进行一些基础配置。
Git 的配置可以使用git config
命令进行编辑和查看:
如果要查看所有配置信息:git config --list
如果要查看单个变量信息:git config var_name
Git
的配置文件储存在个人用户目录下的.gitconfig
文件中(Windows和Linux均为该目录)
以下介绍一些基本的配置:
I.用户信息
用户信息主要指用户名和电邮。为什么要配置这个东西呢?因为本地仓库与远程仓库绑定后,在Git版本历史记录中是要记录每个更改是由哪个用户完成的,因此需要这个标识来区分不同用户的操作记录。
用户信息分为两种:针对全局的用户信息和针对项目的用户信息。在某个项目中,如果没有配置针对该项目的用户信息,则默认使用全局的配置。
-
配置全局个人用户名和电子邮件地址:
$ git config --global user.name "your_name" $ git config --global user.email your_email@server
-
针对项目配置个人用户名和电子邮件地址,只需要去掉
--global
即可:# 首先确保当前路径位于待配置的项目下 $ git config user.name "your_name" $ git config user.email your_email@server
II.默认文本编辑器
Windows就基本不用配置了,Linux需要注意,默认的文本编辑器为vi
和vim
,如果需要修改(比如修改为Emacs):
$ git config --global core.editor emacs
III.差异分析器
同样,一般不会修改这个配置。但如果要改用 vimdiff 的话(例子):
$ git config --global merge.tool vimdiff
4.Git的基本结构
画一张图来解释Git的基本结构:
- 工作区: 工程代码的主要存放位置,也是进行开发的位置
- 暂存区: 英文叫 stage 或 index。一般存放在 .git 目录下的 index 文件(.git/index)中,所以我们把暂存区有时也叫作索引(index)。
- 版本库: 工作区有一个隐藏目录 .git,这个不算工作区,而是 Git 的版本库。
这张图的理解非常重要,它是Git
操作的基础。图中有两个大箭头和标签:
-
add
:即对应git add
操作,他将工作区的代码加入暂存区。暂存区的Index
是一个索引文件。存放的是暂存区的整个目录树的信息,并且为目录树中的每个文件都保存了时间戳和长度。当
git add
将某个文件添加到暂存区的时候,index
文件中添加了这个文件的基本信息。当我们修改了工作区的某个文件,这会导致该文件的时间戳发生变化,而
index
里面存放的仍然是旧的信息,如果此时当我们执行git status
命令来检查版本库的状况,会有下列判断发生:git status
就会用config.js
的时间戳和长度和index
文件里面保存的config.js
的时间戳和长度进行比较。- 如果相同,则认为没有改变,此时会简单的将最新的
config.js
的时间戳信息更新到index
文件中 - 如果发现不同。
git status
会继续用config.js
的文件现在的内容和旧版本的config.js
(保存在.git/objects
中)的内容进行比较,提示内容发生改变。但是并不更新index
文件中的config.js
的时间戳信息。
- 如果相同,则认为没有改变,此时会简单的将最新的
-
commit
:即对应git commit
操作,他将暂存区的修改提交到代码仓库。HEAD
标签指向当前正在开发的某个分支,所有的分支构成了整个仓库。