关于Git的一些基础知识

发布于 2020-10-16  112 次阅读


Git这个版本控制工具我从大一听到了大三,面向GitHub的程序设计从大一写到了大三,但是一直没有仔细地研究过这个工具。

从今天开始我将以博客的形式介绍我对Git的学习。

本系列的博客基于《Git Pro》这本书。

本系列主要聚焦Git相关的思想,对于命令行指令的具体骚操作可能涉猎不多。

分布式版本控制系统

有别与其他版本控制系统(本地版本控制系统、集中式版本控制系统),分布式版本管理系统可能在多个开发者的本地以及远程git服务器(如github)中有代码仓库的完整镜像。

这样git的速度快得不可思议,同时因为本地存了该代码库的信息(文件校验和的SHA-1散列值,树的结构等),因此你完全可以在无网络情况下进行编辑,并在有网络的时候再把更新提交到服务器。

Git的完整性

Git会对文件的校验和进行SHA-1计算,得到一个160位二进制的SHA-1散列值。通过比较文件的SHA-1散列值,Git可以知道文件是否发生了改动,若是SHA-1没变的文件,则Git不会更新。

Git的三种状态:

Git 有三种状态,你的文件可能处于其中之一: 已提交(committed)已修改(modified) 和 已暂存(staged)

  • 已修改表示修改了文件,但还没保存到数据库中。
  • 已暂存表示对一个已修改文件的当前版本做了标记,使之包含在下次提交的快照中。
  • 已提交表示数据已经安全地保存在本地数据库中。

这会让我们的 Git 项目拥有三个阶段:工作区、暂存区以及 Git 目录。

工作区是对项目的某个版本独立提取出来的内容。 这些从 Git 仓库的压缩数据库中提取出来的文件,放在磁盘上供你使用或修改。

暂存区是一个文件,保存了下次将要commit的文件列表信息,一般在 Git 仓库目录中。 按照 Git 的术语叫做“索引”,不过一般说法还是叫“暂存区”。

Git 仓库目录是 Git 用来保存项目的元数据和对象数据库的地方。 这是 Git 中最重要的部分,从其它计算机克隆仓库时,复制的就是这里的数据。


基本的 Git 工作流程如下:

  1. 在工作区中修改文件。
  2. 将你想要下次提交的更改选择性地暂存(add),这样只会将更改的部分添加到暂存区。
  3. 提交(commit)更新,找到暂存区的文件,将快照永久性存储到 Git 目录。

如果 Git 目录中保存着特定版本的文件,就属于 已提交 状态。 如果文件已修改并放入暂存区,就属于 已暂存 状态。 如果自上次检出后,作了修改但还没有放到暂存区域,就是 已修改 状态。

Git文件状态的生命周期:

工作目录下的每一个文件都不外乎这两种状态:已跟踪(tracked)或 未跟踪 (untracked)。 已跟踪的文件是指那些被纳入了版本控制的文件,在上一次快照中有它们的记录,在工作一段时间后, 它们的状态可能是未修改,已修改或已放入暂存区。简而言之,已跟踪的文件就是 Git 已经知道的文件。

工作目录中除已跟踪文件外的其它所有文件都属于未跟踪文件,它们既不存在于上次快照的记录中,也没有被放入暂存区。 初次克隆某个仓库的时候,工作目录中的所有文件都属于已跟踪文件,并处于未修改状态,因为 Git 刚刚检出了它们, 而你尚未编辑过它们。

编辑过某些文件之后,由于自上次提交后你对它们做了修改,Git 将它们标记为已修改文件。 在工作时,你可以选择性地将这些修改过的文件放入暂存区,然后提交所有已暂存的修改,如此反复。

Git使用的简单流程(基础的一些命令):

在本地仓库中初始化仓库:

进入项目目录,并输入

git init

如果是要对开源项目进行修改,或者是进行团队协作,则需要从远程仓库克隆现有仓库的副本。 克隆仓库的指令为

git clone 【url】

//比如像下面这样
$ git clone https://github.com/libgit2/libgit2

//下面的克隆方法可以改变目录名称
$ git clone https://github.com/libgit2/libgit2 mylibgit

若要将某个文件存入暂存区,则使用

git add <FileName>

若要把现有的改变(暂存区中的文件)提交到git仓库,则使用

git commit -m‘balabala’

(若不使用-m参数则git会自动跳转至vim或其他默认文本编辑器让你输入对本次提交的描述)。提交的描述非常重要,不然版本多了以后看见不同的版本根本无从下手。


你好哇!欢迎来到雷公马碎碎念的地方:)