Git学习笔记-1.Git基础知识

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需要注意,默认的文本编辑器为vivim,如果需要修改(比如修改为Emacs):

$ git config --global core.editor emacs

III.差异分析器

同样,一般不会修改这个配置。但如果要改用 vimdiff 的话(例子):

$ git config --global merge.tool vimdiff

4.Git的基本结构

画一张图来解释Git的基本结构:

Git学习笔记-1.Git基础知识_第1张图片

  • 工作区: 工程代码的主要存放位置,也是进行开发的位置
  • 暂存区: 英文叫 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标签指向当前正在开发的某个分支,所有的分支构成了整个仓库。

你可能感兴趣的:(Git,git,学习,github)