目录
- 前言
- 一、版本控制系统
- 1.1 什么是版本控制系统
- 1.2 本地版本控制系统
- 1.3 集中化的版本控制系统
- 1.3 分布式版本控制系统
- 二、Git简介
- 2.1 数据处理方式
- 2.2 几个特点
- 2.2.1 几乎所有操作都是本地执行
- 2.2.2 Git保证完整性
- 2.2.3 Git一般只添加数据
- 2.3 Git中文件状态
- 2.3.1 三种文件状态
- 2.3.2 文件存储区域
- 2.3.3 状态转换
- 三、安装
- 四、初次安装的配置
- 4.1 配置信息
- 4.2 查看所有配置及所在的文件
- 4.3 用户信息
- 4.4 设置文本编辑器
- 4.5 检查配置信息
- 4.5.1 使用--list查看配置信息列表
- 4.5.2 使用\<key\>获取某一项配置
- 4.6 获取帮助
- 4.6.1 使用help获取完整帮助文件
- 4.6.2 使用-h直接打印简要帮助文件
- 结语
老狗(最光阴)
蹉跎错,消磨过,最是光阴化浮沫。
前言
对于文件编辑,有个版本控制系统可以避免文件修改偏差,亦可以有一个回溯的机会。对于软件开发,更是需要一个专门的工具来管理代码,才能保障大量的代码修改得到有效管理。Git无疑是一个很好的工具。
一、版本控制系统
1.1 什么是版本控制系统
版本控制系统是一种文件各个版本变化内容的,以便查阅或者溯源的系统,一般具有历史记录查看,制定版本恢复等功能。
常见的如SVN,Git等都是,甚至用excel记录的文件变更记录也是。。
1.2 本地版本控制系统
本地版本控制系统就是将文件的变更信息保存到本地系统中。
基础的是将自己的不同版本进行重命名,改上不同的日期、版本或者备注信息,就是有个版本系统了。但是这样容易混淆,一不小心就有可能误删,覆盖意料之外的文件。
再进一步,自己用word或者excel记录的文件变更记录,然后将不同版本统一保存。这样处理可以避免文件的混乱,但是仍然无法避免误删,覆盖的问题。
后面开始有人开发本地版本控制系统。将文件变更差异记录到数据库中,然后需要的时候检出,示意图如下。
1.3 集中化的版本控制系统
本地版本控制系统,存在无法进行不同系统协作开发的问题。
集中化的版本控制系统(Centralized Version Control Systems,简称 CVCS)应运而生。通过将文件版本信息保存到统一的一个服务器上来进行管理,然后不同人员通过客户端连接到服务器进行文档的修改。系统管理员亦可以进行权限控制,不同用户的管理等。
如 CVS、Subversion 以及 Perforce 等。
客户端通过网络访问服务器中的文件管理系统,本地仅保存当前版本。实现了文件的写作开发。
但是由于文件版本全部存储与服务器中,依赖于互联网进行访问,当服务宕机或者网络故障时,将无法进行提交或者获取版本信息等记录。
1.3 分布式版本控制系统
为了解决集中式版本控制系统依赖于网络的问题,分布式版本控制系统(Distributed Version Control System,简称 DVCS)横空出世。版本记录区分本地仓库和远程仓库。客户端将整个版本库完整的镜像下载到本地,这样子,即使式互联网或者服务器有故障,都可以通过任何一个本地仓库进行恢复。
每一个库都是一个完整的备份,这样需要暂用较多的内存控件,不过可操作性就很多,甚至可以做到多分子,多代码交互。
二、Git简介
诞生于2005年,它的速度飞快,极其适合管理大项目,有着令人难以置信的非线性分支管理系统。
2.1 数据处理方式
Git 更像是把数据看作是对小型文件系统的一系列快照。 在 Git 中,每当你提交更新或保存项目状态时,它基本上就会对当时的全部文件创建一个快照并保存这个快照的索引。 为了效率,如果文件没有修改,Git 不再重新存储该文件,而是只保留一个链接指向之前存储的文件。 Git 对待数据更像是一个 快照流。
如上图:
- 每次变更存储的是文件;
- 当文件没有变更时,设置一个链接指向旧版本的文件;
2.2 几个特点
2.2.1 几乎所有操作都是本地执行
Git的所有操作几乎是在本地进行的,在本地有完整的版本文件,所有的多做都可以在本地完成,而不用担心网络出现问题时无法提交。可以提交本地版本,然后当网络恢复之后再上传。
2.2.2 Git保证完整性
Git使用SHA-1算法来进行校验,所有的文件均有经过校验,有丢失或损坏都会被发现。
Git文件索引直接使用hash值,不使用文件名。
2.2.3 Git一般只添加数据
Git只往数据库中添加数据,很难删除数据,很难丢失数据。
2.3 Git中文件状态
2.3.1 三种文件状态
- 已修改(modified):
表示修改了文件,但还没保存到数据库中。 - 已暂存(staged):
已暂存表示对一个已修改文件的当前版本做了标记,使之包含在下次提交的快照中。 - 已提交(committed):
已提交表示数据已经安全地保存在本地数据库中。
2.3.2 文件存储区域
Git 项目拥有三个阶段:工作区、暂存区以及 Git 仓库目录。
工作区(Working Directory)是对项目的某个版本独立提取出来的内容。 这些从 Git 仓库的压缩数据库中提取出来的文件,放在磁盘上供你使用或修改。
暂存(Staging Area)区是一个文件,保存了下次将要提交的文件列表信息,一般在 Git 仓库目录中。 按照 Git 的术语叫做“索引”,不过一般说法还是叫“暂存区”。
Git 仓库目录(.git directory(Repository))是 Git 用来保存项目的元数据和对象数据库的地方。 这是 Git 中最重要的部分,从其它计算机克隆仓库时,复制的就是这里的数据。
2.3.3 状态转换
三、安装
Git的安装可参考之前的文章:
Ubuntu Server搭建Git服务器
Linux学习笔记-Ubuntu系统下配置用户ssh只能访问git仓库
华为云云耀云服务器L实例评测|从零搭建Git服务器并配置ssh免密访问
Git for windows软件下载路径为:Git for windows
Windows版本下载路径:Download for Windows
Linux版本安装参考官网说明:Download for Linux and Unix
四、初次安装的配置
4.1 配置信息
Git可以通过自带的git config工具来管理配置信息。将会以文件的形式存储到电脑中,有三个不同的存储位置:
- /etc/gitconfig 文件:包含系统上每一个用户及他们仓库的通用配置,git config 时带上 --system 选项进行修改;
- ~/.gitconfig 或 ~/.config/git/config 文件:针对当前用户的配置,使用–global 选项读写此文件;
- 当前使用仓库的 Git 目录中的 config 文件( .git/config):针对该仓库,默认选项,可以使用–local 选项让读写此文件。
各个文件的优先级如下:
越具体的优先级越高。
4.2 查看所有配置及所在的文件
git config --list --show-origin
结果如下:
列出了所有的配置信息以及配置信息所保存的文件路径。
C:\Users\LJM> git config --list --show-origin
file:D:/Program Files/Git/etc/gitconfig diff.astextplain.textconv=astextplain
file:D:/Program Files/Git/etc/gitconfig filter.lfs.clean=git-lfs clean -- %f
file:D:/Program Files/Git/etc/gitconfig filter.lfs.smudge=git-lfs smudge -- %f
file:D:/Program Files/Git/etc/gitconfig filter.lfs.process=git-lfs filter-process
file:D:/Program Files/Git/etc/gitconfig filter.lfs.required=true
file:D:/Program Files/Git/etc/gitconfig http.sslbackend=openssl
file:D:/Program Files/Git/etc/gitconfig http.sslcainfo=D:/Program Files/Git/mingw64/ssl/certs/ca-bundle.crt
file:D:/Program Files/Git/etc/gitconfig core.autocrlf=true
file:D:/Program Files/Git/etc/gitconfig core.fscache=true
file:D:/Program Files/Git/etc/gitconfig core.symlinks=false
file:D:/Program Files/Git/etc/gitconfig core.fsmonitor=true
file:D:/Program Files/Git/etc/gitconfig pull.rebase=false
file:D:/Program Files/Git/etc/gitconfig credential.helper=manager-core
file:D:/Program Files/Git/etc/gitconfig credential.https://dev.azure.com.usehttppath=true
file:D:/Program Files/Git/etc/gitconfig init.defaultbranch=master
4.3 用户信息
安装Git后配置用户信息,一般设置全局的用户名和邮箱,只需要设置一次,后续都会使用该信息进行提交:
git config --global user.name "具体的用户名(引号包裹)"
git config --global user.email 具体的邮箱信息(不需要引号)
若需要指定单独项目的邮箱和用户名,则使用不带“–global”参数的设置指令重新设置即可。
4.4 设置文本编辑器
未配置,Git 会使用操作系统默认的文本编辑器,若有需要可以通过core.editor参数设置成不同的编辑器。
git config --global core.editor 编辑器名称
4.5 检查配置信息
4.5.1 使用–list查看配置信息列表
git config --list
注: 此时可能会有重复的数据,因为不同文件可能存在一样的配置信息,重复是Git一般使用找的的最后一个配置。
C:\Users\LJM>git config --list
diff.astextplain.textconv=astextplain
filter.lfs.clean=git-lfs clean -- %f
filter.lfs.smudge=git-lfs smudge -- %f
filter.lfs.process=git-lfs filter-process
filter.lfs.required=true
http.sslbackend=openssl
http.sslcainfo=D:/Program Files/Git/mingw64/ssl/certs/ca-bundle.crt
core.autocrlf=true
core.fscache=true
core.symlinks=false
core.fsmonitor=true
pull.rebase=false
credential.helper=manager-core
credential.https://dev.azure.com.usehttppath=true
init.defaultbranch=master
4.5.2 使用<key>获取某一项配置
示例:
git config user.name
C:\Users\LJM>git config user.name
Zero.Lin
4.6 获取帮助
4.6.1 使用help获取完整帮助文件
可以通过help指令获取git帮助,一下是三种获取帮助的指令:
# 指令1
git help <verb>
# 指令2
git <verb> --help
# 指令3
man git-<verb>
注: <verb> 是具体的功能模块指令。
示例:
git help config
直接打开了帮助网页了:
4.6.2 使用-h直接打印简要帮助文件
git <verb> -h
注: <verb> 是具体的功能模块指令。
示例:
C:\Users\LJM>git config -h
usage: git config [<options>]
Config file location
--global use global config file
--system use system config file
--local use repository config file
--worktree use per-worktree config file
-f, --file <file> use given config file
--blob <blob-id> read config from given blob object
Action
--get get value: name [value-pattern]
--get-all get all values: key [value-pattern]
--get-regexp get values for regexp: name-regex [value-pattern]
--get-urlmatch get value specific for the URL: section[.var] URL
--replace-all replace all matching variables: name value [value-pattern]
--add add a new variable: name value
--unset remove a variable: name [value-pattern]
--unset-all remove all matches: name [value-pattern]
--rename-section rename section: old-name new-name
--remove-section remove a section: name
-l, --list list all
--fixed-value use string equality when comparing values to 'value-pattern'
-e, --edit open an editor
--get-color find the color configured: slot [default]
--get-colorbool find the color setting: slot [stdout-is-tty]
Type
-t, --type <type> value is given this type
--bool value is "true" or "false"
--int value is decimal number
--bool-or-int value is --bool or --int
--bool-or-str value is --bool or string
--path value is a path (file or directory name)
--expiry-date value is an expiry date
Other
-z, --null terminate values with NUL byte
--name-only show variable names only
--includes respect include directives on lookup
--show-origin show origin of config (file, standard input, blob, command line)
--show-scope show scope of config (worktree, local, global, system, command)
--default <value> with --get, use default value when missing entry
C:\Users\LJM>
结语
本文介绍了Git的 一些发展历程和基本原理等信息,是Git的一些基本信息,是使用Git的基础。