Git 之一 起源、安装、配置

写在前面

  Git 的官网上有很详细的使用教程(当然有翻译版本),具体地址是 https://git-scm.com/book/zh/v2。唯一不足就是,很多讲解并没有实机演示。但是,毫无疑问,官网资料是最全面的!如果有任何疑问,可以去官网看看!

什么是 Git

  Git 是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理。 Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。
  Linus 个人对于集中式版本控制系统并不感兴趣,在 Git 出来之前,集中式版本控制系统要比分布式版本控制系统更加流行(彼时,分布式版本控制系统很少,其中 BitKeeper 就是比较出色的一个)。而 Linus 最终选择了分布式版本控制系统 BitKeeper 来管理 Linux 源码。

诞生

  在 Linux 开源的初期,Linux 开源项目的代码是 linus 本人通过 linux 命令 diff 和 patch 两条命令手动完成。随着 Linux 代码越来越壮大,靠 Linus 一个人来手动合并已经不现实。2002 年,Linus 选择了一个商业版本控制系统 BitKeeper 作为 Linux 内核的代码管理工具(BitKeeper 的开发商 BitMover 授权 linux 社区免费使用)。但是,免费使用是有很多的限制的,因此 linux 社区的大佬开始破解 BitKeeper。其中,samba 的作者 andrew 破解成功了。但是被 BitMover 公司发现,收回免费使用权。
  迫不得已,Linus 选择了自己开发一个分布式版本控制工具以替代 BitKeeper。linus 闭关一个月,写出了 Git。在一个月后,Git 成功接管了 Linux 社区的版本控制工作,并且开始开源。维基百科中,有如下历史记录:

  • 2005 年 4 月 3 日,开始开发 Git。
  • 2005 年 4 月 6 日,项目发布。
  • 2005 年 4 月 7 日,Git 就可以作为自身的版本控制工具了。
  • 2005 年 4 月 18 日,发生第一个多分支合并。
  • 2005 年 4 月 29 日,Git 的性能就已经达到了 Linus 的预期。
  • 2005 年 6 月 16 日,Linux 核心 2.6.12 发布,那时 Git 已经在维护 Linux 核心的源代码了。

  在 2005 年 7 月 26 日,Linus 功成身退,将 Git 的维护交给另外一个 Git 的主要贡献者 Junio C Hamano。

在 Linus Torvalds 开发出 Git 分布式版本控制系统 11 年后的 2016 年,BitKeeper 宣布在 Apache 2.0 许可证下开源。

Git 安装

  Git 本身支持 Mac OS X、Windows、Linux/Unix 这些主流的平台。
在这里插入图片描述
其中,Mac OS X 和 Windows 都是直接在官网下载安装包。对于 Windows 平台,还有个网站:https://gitforwindows.org/。注意,下载需要翻墙! 而 Linux/Unix 则主要是通过各自的包管理工具来安装:

// Debian/Ubuntu
// For the latest stable version for your release of Debian/Ubuntu
# apt-get install git
// For Ubuntu, this PPA provides the latest stable upstream Git version
# add-apt-repository ppa:git-core/ppa # apt update; apt install git
// Fedora
# yum install git (up to Fedora 21)
# dnf install git (Fedora 22 and later)
// Gentoo
# emerge --ask --verbose dev-vcs/git
// Arch Linux
# pacman -S git
// openSUSE
# zypper install git
// Mageia
# urpmi git
// Nix/NixOS
# nix-env -i git
// FreeBSD
# pkg install git
// Solaris 9/10/11 (OpenCSW)
# pkgutil -i git
// Solaris 11 Express
# pkg install developer/versioning/git
// OpenBSD
# pkg_add git
// Alpine
$ apk add git
// Red Hat Enterprise Linux, Oracle Linux, CentOS, Scientific Linux, et al.
// RHEL and derivatives typically ship older versions of git. You can download a tarball and build from source, or use a 3rd-party repository such as the IUS Community Project to obtain a more recent version of git.
// Slitaz
$ tazpkg get-install git

下面主要以 Windows 平台为例来简单介绍一下!为了节约文章篇幅,将个截图进行了拼接。其实,我们不需要关心安装中的各种配置,直接以默认的选项安装就可以! 对于大多数的配置,我们在安装完成后也是可以再次更改的!安装过程中,主要是配置一些配套工具。因为 Git 本身是个命令行工具!

安装中的这些选项最终会生成一个配置文件。具体为 Git 安装目录 \mingw32\etc\gitconfig

一二三

在这里插入图片描述
需要注意的是:

  • 第二步:配置 Git 的安装选项。例如 桌面图标、文件关联、检测升级等等
  • 第三步:选择默认的编辑器。默认的是 Vim。看图中的说明,其推荐更换为比较现代的编辑器。Git 支持如下编辑器:
    在这里插入图片描述
    对应的配置文件是 Git 安装目录 \mingw32\etc\gitconfig在这里插入图片描述

四五六

在这里插入图片描述

  • 第四步:调整系统环境变量
  • 第五步:配置 Git 中使用的 HTTPS 通信使用的加密库
  • 第六步:选择换行符

七八九

在这里插入图片描述

  • 第七步:Git 是个命令行工具(使用我们常见的那个黑框)。Git 可以选择两种黑框:Windows 系统的 CMD 和 MSYS2 中的 MinTTY

最后,点击 Install 就开始安装了!

完成

安装完成后,我们就可以打开 Git 了。Git 提供了一个 GUI 界面 和 一个 Bash 界面,如下图:
在这里插入图片描述
其中,GUI 界面仅能实现很少的一部分功能。通常我们可以在提交代码时,使用比较简单;Bash 功能更加强大,可执行全部的命令操作!

配置

  Git 的配置是通过 Git 提供的命令来实现的。Git 命令的使用可以参见另一篇博文。Git 的配置主要就是 Git 命令 git config 的使用。Git 提供了一个叫做 git config 的命令,专门用来配置或读取相应的工作环境变量。这些环境变量,决定了 Git 在各个环节的具体工作方式和行为。Git 的配置按照作用范围优先级从高到低如下:

  1. 仓库级别
    优先级最高,仅对所在的仓库有效,对应的参数是 git config --local。对应的配置文件是 当前工作目录中/.git/config 文件
  2. 用户级别
    优先级次之,对所有仓库有效。如果没有配置仓库级别,则会启用本配置。对应的参数是 git config --global。对应的配置文件是 ~/.gitconfig 文件(Windows下就是系统盘符:/用户/你的用户名/.gitconfig
  3. 系统级别
    优先级最低,对所有仓库有效。如果没有以上两种级别,则会启用本配置。对应的参数是 git config --system。对应的配置文件在 Linux 系统下的 /etc/gitconfig,在 Windows 系统下的Git 安装目录\mingw64\etc\gitconfig我们在安装时所选择的配置就在该配置文件中。

高级别的配置都会覆盖低的相同配置。所以 .git/config 里的配置会覆盖 /etc/gitconfig 中的同名变量。使用 git config --list 查看相关配置。
在这里插入图片描述
注意:有时,通过上面的命令,可能出现重复变量,它们来自不同的配置文件,不过,最终 git 会采用上面说明的最近目录中的参数。

在 Windows 下,还有个配置文件目录:系统盘符:\ProgramData\Git\config
更详细的使用说明,见 Git 安装目录下的说明文档

  下面我们重点介绍常用的一些配置。Git 本身支持的配置项有很多,官网 https://git-scm.com/docs/git-config.html 有介绍。在以下的举例中,默认都是使用 --global 参数,其对应的配置文件为 系统盘/用户/你的用户名/.gitconfig

身份

  首先,Git 是分布式版本控制系统,必须要能区别每个成员,所以,每个机器都必须自报家门:你的名字和 Email 地址。要使用 Git 这个配置是必须的,否则在使用Git 时会提示用户进行设置。

$ git config --global user.name "ZCShou"
$ git config --global user.email ZCShou@live.com

如果用了 --global 选项,那么更改的配置文件就是位于你用户主目录下(Windows下就是系统盘符:/用户/你的用户名/.gitconfig),以后你所有的项目都会默认使用这里配置的用户信息。 如果要在某个特定的项目中使用其他名字或者电邮,只要去掉 --global 选项重新配置即可,新的设定保存在当前项目.git/config 文件里。其中,后者会覆盖前者而起作用!

远程访问

  在 Git 架构的版本控制系统中,通常也会有个服务器仓库用来同步各协作者的操作。例如,我们比较了解的 Github 就是其中之一。要访问远程服务器上的仓库,我们就需要一定的协议。Git 可以使用四种主要的协议来传输资料:本地协议(Local),HTTP/HTTPS 协议,SSH(Secure Shell)协议及 Git 协议。例如,Github 就提供了 SSH 和 HTTPS 这两种方式,如下图:
在这里插入图片描述

  • 本地协议(Local): 无需要配置
  • Git 协议: 无需配置
  • HTTP/HTTPS: 每次推送,Git 服务器会询问用户名与密码。 默认情况下它会在终端中提示服务器是否允许你进行推送。如果不想在每一次推送时都输入用户名与密码,你可以设置一个 “credential cache”。 最简单的方式就是将其保存在内存中几分钟,可以简单地运行 git config --global credential.helper cache 来设置它。在 Windows 系统中,在输入过用户名密码之后,会被系统给保存下来!我们可以如下图所示的位置进行修改:
    在这里插入图片描述
  • SSH: 通过 SSH 协议克隆版本库,你可以指定一个 ssh:// 的 URL:git clone ssh://user@server/project.git 或者使用一个简短的 scp 式的写法:git clone user@server:project.git
      现有的很多平台(例如 Github)都是以 SSH 秘钥的方式进行通信的!因此如果我们要以 SSH 的方式访问远程仓库,则根据 SSH 协议,必须要生成我们 Key。Git 客户端默认是带有 OpenSSH 的,配置方式是使用命令ssh-keygen -t rsa -C "youremail@example.com",如下:
    在这里插入图片描述
    如上图,如果我们不填写保存 Key 的文件名,则默认会在系统用户的主目录下生成 .ssh 的文件夹下保存生成的 Key,如下图
    在这里插入图片描述
    如果填写了保存 Key 的文件名,则会指定的位置保存我们的 Key(如果没有填写路径,则会在 Bash 当前工作目录下)。

关于 Git 使用的协议 及远程仓库的使用,具体见博文Git 之四 通信协议(HTTPS、SSH、Git)、使用远程仓库(GitHub、GitLab、Gitee等)

文本编辑器

  Git 默认使用的文本编辑器, 一般 Vim。这个编辑器做什么用呢?在我们提交(commit )代码时,需要添加说明,此时就需要一个编辑器;再比如,我们在 Git Bash 命令行中编辑 Git 的配置文件时,也需要一个编辑器!默认情况下,在需要用户输入时,Git 会启用 Vim。如果我们更改后,则会在有输入打开我们设置的编辑器。我使用的是 VSCode(insider 版本)

$ git config --global core.editor Code-Insiders.exe

使用以上命令注意 --global 参数,其位于 系统盘的 User 目录下。下图是 Git 官网给出的 编辑器命令列表:
在这里插入图片描述
一个使用示例,具体如下:
在这里插入图片描述
注意:

  1. 确保你得编辑器在环境变量中
  2. 注意 --global 参数,与上面的说明一样
  3. 当然,该项也可以在安装时选择,具体见上一节安装的讲解部分。

差异比较工具

  Git 可以理解 kdiff3,tkdiff,meld,xxdiff,emerge,vimdiff,gvimdiff,ecmerge,和 opendiff 等合并工具的输出信息。

$ git config --global merge.tool vimdiff

内容推送

  不带任何参数的git push,默认只推送当前分支,这叫做 simple 方式。此外,还有一种 matching 方式,会推送所有有对应的远程分支的本地分支。Git 2.0 版本之前,默认采用 matching 方法,现在改为默认采用 simple 方式。如果要修改这个设置,可以采用 git config 命令。

$ git config --global push.default matching
# 或者
$ git config --global push.default simple

其他

Git 官网有详细的介绍所有的配置项 https://git-scm.com/book/zh/v2/%E8%87%AA%E5%AE%9A%E4%B9%89-Git-%E9%85%8D%E7%BD%AE-Git 。

配置完成后,就可以开启 Git 的使用之旅了。

参考

  1. http://www.runoob.com/git/git-tutorial.html
  2. http://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000
  3. http://www.yanyaozhen.com/category/git/
  4. https://www.bootcss.com/p/git-guide/6089557264a6b348958f449949df42a6d3a2e542c000
  5. http://www.yanyaozhen.com/category/git/
  6. https://www.bootcss.com/p/git-guide/
ZCShouEXP CSDN认证博客专家 砖家 码字员 没了
进步始于交流,收获源于分享!进步始于交流,收获源于分享!进步始于交流,收获源于分享!进步始于交流,收获源于分享!进步始于交流,收获源于分享!
©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页