内容纲要

🗂 | 查看 Git 专题可浏览更多内容


版本控制系统

什么是版本控制系统

版本控制是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统。

为什么需要版本控制系统

举个最简单的例子,你很有可能有过这样的经历:

你的甲方(可能是导师或领导)对于你提交的工作文稿有过多次的修改意见,而对于之前否决的版本你又需要留存,想着后续可以回顾之前的思路,或防止出现改了几版后又被要求用回最出版的局面….

慢慢的你的文件变成了这样:

  • 初稿.docs
  • 修改1.docs
  • 修改2.docs
  • 终稿.docs
  • 终稿改.docs
  • 终稿不再改.docs
  • 最终真的真的不再改.docs

这时候问题就来了,这样的「改文件名存储法」真是糟糕透顶,单看文件名根本想不起之前改动了什么,有时甚至会误删文件而事后才想起其重要性。

想一想,如果有一个工具可以做到:

  • 每次改动将项目完整的保存;
  • 每次保存的历史注明了时间、作者以及简短的改动描述;
  • 各个历史版本之间所修改的文件,可对比修改之处;

是不是很棒?这就是版本控制系统可以做到的,且不止于此。

Git

什么是 Git

Git 是一个免费和开源的分布式版本控制系统,旨在以速度和效率处理从小型到大型项目的所有内容。

Git 易于学习,占用空间小,性能快如闪电。它优于 SCM 工具,如 Subversion、CVS、Perforce 和 ClearCase,具有廉价的本地分支、方便的暂存区和多个工作流等功能。

下载 Git 及安装

你可以在 Git 的官网网站免费获取:Downloads – Git

除了在官方网站下载,还可以通过各种包管理工具进行安装 Git.

例如 macOS 用户在安装 Homebrew 后可以使用命令安装:

$ brew install git

Debian 及基于 Debian 的 Linux 用户可以使用 APT 进行安装:

$ sudo apt install git-all

RHEL、Fedora 等用户可以使用 DNF 安装:

$ sudo dnf install git-all

在成功安装后,使用命令:

$ git --version

如果能看到版本号就表示安装成功了。

Git 的最小配置

安装完 Git 之后,要做的第一件事就是设置你的用户名和邮件地址。 这一点很重要,因为每一个 Git 提交都会使用这些信息,它们会写入到你的每一次提交中。

macOS 或 Linux 用户可以使用自带的「终端」、Windows 用户可以使用「Git Bash」或「Windows Terminal」,然后输入两条命令:

💡 $ 符号表示这是一个在命令行界面中的命令,并不需要在输入命令时带上 $ 符号。

$ git config --global user.name "John Doe"
$ git config --global user.email johndoe@example.com

这里的 --global 选项还有一些别的选项:

  • --local:只针对某个仓库;
  • --global:针对当前用户的所有仓库;
  • --system:针对系统上所有用户的仓库;

--system 选项不常用,而一般需要使用选项 --global 配置适用于当前用户的所有仓库的用户信息,而针对某个特定仓库需要使用不同于 --global 所配置的用户信息时,使用选项 --local

在配置完成用户信息后,可以查看检查一下:

$ git config --list --global

如果配置错误了可以重新使用上述两条命令输入正确的用户信息,旧的用户信息就会被覆盖了。

获取帮助

在使用 Git 的命令时,可以在命令后加上 -h 选项获取相关的帮助信息,如获取配置相关的帮助:

$ git config -h
用法:git config [<选项>]

配置文件位置
    --global              使用全局配置文件
    --system              使用系统级配置文件
    --local               使用仓库级配置文件
    --worktree            使用工作区级别的配置文件
    -f, --file <文件>     使用指定的配置文件
    --blob <数据对象 ID>  从给定的数据对象读取配置

操作
    --get                 获取值:名称 [值模式]
    --get-all             获得所有的值:键 [值模式]
    --get-regexp          根据正则表达式获得值:名称正则 [值模式]
    --get-urlmatch        获得 URL 取值:section[.var] URL
    --replace-all         替换所有匹配的变量:名称 值 [值模式]
    --add                 添加一个新的变量:名称 值
    --unset               删除一个变量:名称 [值模式]
    --unset-all           删除所有匹配项:名称 [值模式]
    --rename-section      重命名小节:old-name new-name
    --remove-section      删除一个小节:name
    -l, --list            列出所有
    --fixed-value         在比较值与 '值模式' 时,使用字符串字面比较
    -e, --edit            打开一个编辑器
    --get-color           获得配置的颜色:配置 [默认]
    --get-colorbool       获得颜色设置:配置 [stdout-is-tty]

类型
    -t, --type <类型>     取值为该类型
    --bool                值是 "true" 或 "false"
    --int                 值是十进制数
    --bool-or-int         值是 --bool 或 --int
    --bool-or-str         值是 --bool 或字符串
    --path                值是一个路径(文件或目录名)
    --expiry-date         值是一个到期日期

其它
    -z, --null            终止值是 NUL 字节
    --name-only           只显示变量名
    --includes            查询时参照 include 指令递归查找
    --show-origin         显示配置的来源(文件、标准输入、数据对象,或命令行)
    --show-scope          显示配置的作用域(工作区、本地、全局、系统、命令)
    --default <取值>      使用 --get 参数,当缺少设置时使用默认值