LV01-Git-03-首次运行Git前的配置
本文主要是初次使用Git前的一些相关配置的相关笔记,若笔记中有错误或者不合适的地方,欢迎批评指正😃。
点击查看使用工具及版本
| Windows | windows11 |
| Ubuntu | Ubuntu16.04的64位版本 |
| VMware® Workstation 16 Pro | 16.2.3 build-19376536 |
点击查看本文参考资料
| 参考方向 | 参考原文 |
| Git 官网 | https://git-scm.com/ |
| Git 官方文档 | https://git-scm.com/doc |
| Pro Git Book | https://git-scm.com/book/zh/v2 |
| Git 快速使用指南 | https://training.github.com/downloads/zh_CN/github-git-cheat-sheet/ |
| Visual Git Cheat Sheet | https://ndpsoftware.com/git-cheatsheet.html#loc=index |
一、配置文件
Git 自带一个 git config 的工具来帮助设置控制 Git 外观和行为的配置变量。
1. 在Linux上的配置文件
(1)/etc/gitconfig 文件::包含系统上每一个用户及他们仓库的通用配置。 如果在执行 git config 时带上 --system 选项,那么它就会读写该文件中的配置变量。 (由于它是系统配置文件,因此需要管理员或超级用户权限来修改它,但是默认好像不会创建这个文件,有需要的话需要自己创建)
(2)~/.gitconfig 或 ~/.config/git/config 文件:只针对当前用户。 可以传递 --global 选项让 Git 读写此文件,这会对系统上 所有 的仓库生效。
(3)当前使用仓库的 Git 目录中的 config 文件(即 .git/config):针对该仓库。 可以传递 --local 选项让 Git 强制读写此文件,虽然默认情况下用的就是它。 (当然,需要进入某个 Git 仓库中才能让该选项生效。)
注意:每一个级别会覆盖上一级别的配置,所以 .git/config 的配置变量会覆盖 /etc/gitconfig 中的配置变量。
我们可以通过以下命令查看所有的配置以及它们所在的文件:
1 | git config --list --show-origin |
2. 在Windows中的配置文件
在 Windows 系统中,Git 会查找 $HOME 目录下(一般情况下是 C:\Users\$USER )的 .gitconfig 文件。 Git 同样也会寻找 /etc/gitconfig 文件,但只限于 MSys 的根目录下,即安装 Git 时所选的目标位置。
如果我们在 Windows 上使用 Git 2.x 以后的版本,那么还有一个系统级的配置文件,Windows XP 上在 C:\Documents and Settings\All Users\Application Data\Git\config ,Windows Vista 及其以后的版本在 C:\ProgramData\Git\config 。此文件只能以管理员权限通过 git config -f <file> 来修改。
我们可以通过以下命令查看所有的配置以及它们所在的文件:
1 | git config --list --show-origin |
如下图所示:
二、基本配置
1. 用户信息
安装完 Git 之后,要做的第一件事就是设置用户名和邮件地址。 这一点很重要,因为每一个 Git 提交都会使用这些信息,它们会写入到我们的每一次提交中,不可更改:
1 | git config --global user.name "John Doe" |
如果使用了 --global 选项,那么该命令只需要运行一次,因为之后无论在该系统上做任何事情, Git 都会使用那些信息。 当想针对特定项目使用不同的用户名称与邮件地址时,可以在那个项目目录下运行没有 --global 选项的命令来配置。很多 GUI 工具都会在第一次运行时帮助我们配置这些信息。
2. 文本编辑器
我们还可以配置默认文本编辑器,当 Git 需要我们输入信息时会调用它。 如果未配置,Git 会使用操作系统默认的文本编辑器。如果想使用不同的文本编辑器,例如 Emacs,可以这样做:
1 | git config --global core.editor emacs |
在 Windows 系统上,如果想要使用别的文本编辑器,那么必须指定可执行文件的完整路径。 它可能随我们的编辑器的打包方式而不同。对于 Notepad++ ,一个流行的代码编辑器来说,我们可能想要使用 32 位的版本, 因为在《Pro Git Book》这本书编写时 64 位的版本尚不支持所有的插件。 如果我们在使用 32 位的 Windows 系统,或在 64 位系统上使用 64 位的编辑器,那么你需要输入如下命令:
1 | git config --global core.editor "'C:/Program Files/Notepad++/notepad++.exe' -multiInst -notabbar -nosess |
【说明】vim、Emacs 和 Notepad++ 都是流行的文本编辑器,通常程序员们会在 Linux 和 macOS 这类基于 Unix 的系统或 Windows 系统上使用它们。 如果我们在使用其他的或 32 位版本的编辑器,可以在 git config core.editor 命令 中查看设置为该编辑器的具体步骤。
3. 检查配置信息
如果想要检查我们的配置,可以使用 git config --list 命令来列出所有 Git 当时能找到的配置。
1 | git config --list |
我们可能会看到重复的变量名,因为 Git 会从不同的文件中读取同一个配置(例如:/etc/gitconfig 与 ~/.gitconfig)。 这种情况下,Git 会使用它找到的每一个变量的最后一个配置。我们还可以通过输入 git config <key>: 来检查 Git 的某一项配置
1 | git config user.name |
由于 Git 会从多个文件中读取同一配置变量的不同值,因此我们可能会在其中看到意料之外的值而不知道为什么。 此时,我们可以查询 Git 中该变量的 原始 值,它会告诉我们哪一个配置文件最后设置了该值:
1 | git config --show-origin rerere.autoUpdate |
4. 对LF和CRLF的处理
Linux系统和Windows系统下的换行符不一样,Linux是\n,即LF,Windows下面是\r\n,即CRLF,git在维护版本库的时候统一使用的是LF。所以当文档跨平台进行编辑的时候,换行符就会产生差别,在不同平台编辑过得文件在进行commit的时候也会有相应的换行符警告。
1 | LF will be replaced by CRLF in ....... |
那么怎么处理呢?这样就可以了(不过这样似乎只是治标不治本,仅仅是忽略了检查,要是文章的话还好,要是代码的话,有可能会因为换行符而出现问题,暂时先这样解决)。
1 | git config --global core.autocrlf false |
三、GitHub
1. GitHub是啥?
GitHub 是最大的 Git 版本库托管商,是成千上万的开发者和项目能够合作进行的中心。 大部分 Git 版本库都托管在 GitHub,很多开源项目使用 GitHub 实现 Git 托管、问题追踪、代码审查以及其它事情。 所以,尽管这不是 Git 开源项目的直接部分,但如果想要专业地使用 Git,我们将不可避免地与 GitHub 打交道,所以这依然是一个绝好的学习机会。
2. SSH
2.1 什么是SSH?
SSH为Secure Shell的缩写,由IETF的网络小组(Network Working Group)所制定,是一种加密的网络传输协议,可在不安全的网络中为网络服务提供安全的传输环境,其保证数据安全的原理是非对称加密。
| 对称加密 | 使用的是一套秘钥,数据的加密以及解密用的都是同一套秘钥,当所有的客户端以及服务端都需要保存这套秘钥时,泄露的风险很高,而一旦秘钥便泄露便保证不了数据安全。 |
| 非对称加密 | 包含两套秘钥——公钥以及私钥,其中公钥用来加密,私钥用来解密,并且通过公钥计算不出私钥,因此私钥谨慎保存在服务端,而公钥可以随便传递,即使泄露也无风险。 |
SSH在正确使用时可弥补网络中的漏洞;SSH是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议;利用SSH协议可以有效防止远程管理过程中的信息泄露问题。
SSH最初是UNIX系统上的一个程序,后来又迅速扩展到其他操作平台。SSH客户端适用于多种平台。几乎所有UNIX平台—包括HP-UX、Linux、AIX、Solaris、Digital UNIX、Irix,以及其他平台,都可运行SSH。
2.2 登录方式
| 方式 | 说明 |
| 密码登录 | 1.服务端收到登录请求后,首先互换公钥; 2.客户端用服务端的公钥加密账号密码并发送; 3.服务端用自己的秘钥解密后得到账号密码,然后进行验证; 4.服务端用客户端的公钥加密验证结果并返回; 5.客户端用自己的秘钥解密后得到验证结果. |
| 公钥登录 (证书登录) |
1.客户端用户必须手动地将自己的公钥添加到服务器一个名叫authorized_keys的文件里,顾名思义,这个文件保存了所有可以远程登录的机器的公钥; 2.客户端发起登录请求,并且发送一个自己公钥的指纹(具有唯一性,但不是公钥); 3.服务端根据指纹检测此公钥是否保存在authorized_keys中; 4.若存在,服务端便生成一段随机字符串,然后利用客户端公钥加密并返回; 5.客户端收到后用自己的私钥解密,再利用服务端公钥加密后发回; 6.服务端收到后用自己的私钥解密,如果为同一字符串,则验证通过. |
【参考文章】
2.3 SSH服务安装
2.3.1 在Linux上使用SSH
- (1)查询是否安装SSH服务端,可以使用以下命令
1 | sudo ps -e |grep ssh |
查询情况如下图所示:
终端返回结果中没有 sshd,则说明系统还没有安装 ssh-server 服务,后续对ssh进行安装
- (2)若是没有安装SSH服务端,可以使用以下命令安装ssh服务
1 | sudo apt-get install openssh-server |
- (3)检查SSH服务端是否安装成功
1 | sudo ps -e |grep ssh |
安装情况如下图所示:
出现了sshd,说明ssh服务已经正常启动了,若安装完毕后,还是没有sshd出现,那么就进行下一步,手动启动ssh服务。
- (4)启动 ssh服务
1 | sudo /etc/init.d/ssh start |
运行完毕之后,重新查询ssh服务即可。
SSH服务常用相关命令
1
2
3 sudo /etc/init.d/ssh stop # 停止服务
sudo /etc/init.d/ssh start # 启动服务
sudo /etc/init.d/sshresart # 重启服务
2.3.2 在Windows上使用SSH
Windows中,SSH服务好像是系统自带的功能,我使用的时候是直接就用了,默认是开启的,但是有的时候默认可能关闭,这个时候我们按以下步骤操作:
- (1)检查SSH,我们打开命令行,输入ssh查看是否有输出信息
我的电脑之前开启过,多以这里会输出ssh命令的使用帮助,但是若是出现类似找不到命令之类的,那就说明SSH服务没有开启。若是没有开启那就执行后边的步骤。
- (2)之后的Windows10或者Windows11版本已经支持OpenSSH服务。默认程序已经安装好了OpenSSH 客户端,【Windows设置】→【应用】→【应用和功能】→【可选功能】就可看到系统已经安装好的可选功能,如下图所示
若在已安装列表里面没有OpenSSH 服务端,单击添加功能找到OpenSSH 服务端等待安装完毕即可,下载完毕根据提示可能需要重启电脑(有需要的话就重启,不需要就算了)。之后,就可以再次在cmd中键入ssh查看自己的ssh服务是否已成功启动。若安装完后,cmd中还是没有上图中的显示,则考虑是环境变量的问题。
- (3)开启SSH服务,【Win+S】→【键入服务】→【打开本地服务界面】→【找到OpenSSH SSH Server】→【启动方式改为自动】
2.4 Windows终端登录Ubuntu
2.4.1 虚拟机网络模式配置
- VMware中虚拟网络编辑器设置如下

- 虚拟机的网络适配器也需改为桥接模式
2.4.2 查看windows和Ubuntu网络地址
- Windows:
ipconfig - Ubuntu:
ifconfig
若Ubuntu出现以下情况,安装net-tools即可,安装命令:
1 | sudo apt install net-tools |
- 记录下Ubuntu的IP地址,如下图。
2.4.3 是否能ping通?
ssh服务远程登录需要保证两个IP可以ping通,也就是可以正常的通信,我们可以使用命令,在Windows命令行执行以下命令和Ubuntu的终端,后边的ip要写对方的IP地址,保证两者可以互相ping通。
1 | ping <ip-address> |
2.4.4 登录Ubuntu
我们在Windows的命令行中执行以下命令登录VMware中的Ubuntu:
1 | ssh user-name@ip-address |
首次登录会出现如下提示,输入用户密码即可。
2.4.5 登录成功的效果
登录过程中可能会提示输入密码,如下图所示:
由于是整理之前的笔记,我重新登陆了一下,不过此时换成了ubuntu的名字发生了变化罢了:
3. SSH访问GitHub
到这一部分的时候,在Linux下或者Windows中执行的命令都是一样的,最多就是文件位置或者打印信息可能有所区别,这里以Ubuntu(内核为Linux)为例说明。
3.1 检查SSH是否可以连接GitHub
- 我们可以通过以下命令检查ssh是否可以连接到GitHub
1 | ssh -T git@github.com |
- 连接失败的情况
若出现以下提示,则不能连接到github,需要重新配置,按照后边配置即可。
1 | The authenticity of host 'github.com (20.205.243.166)' can't be established. |
- 连接成功的情况
若连接成功,则会有如下提示,可以跳过后边的配置步骤,直接开始使用 Git。
1 | Hi qidaink! You've successfully authenticated, but GitHub does not provide shell access. |
3.2 安装 ssh keys
【注意】:Linux下相关的文件在~/.ssh目录,在Windows中的话在C:\Users\<用户名>\.ssh这个目录,这里以Linux中的操作为例。
- (1)检查相应的文件是否存在
主要是检查文件id_rsa(私钥)和id_rsa.pub(公钥)是否存在。
1 | cd ~/.ssh |
发现没有id_rsa(私钥)和id_rsa.pub(公钥)这两个文件,说明没有ssh keys。若有这两个文件,那么就移除当前的id_rsa(私钥)和id_rsa.pub(公钥):
1 | rm ~/.ssh/id_rsa* |
- (2)重新生成
id_rsa和id_rsa.pub
1 | 一开始用的这个命令 |
user's github email address就是自己注册github时的邮箱。执行后会出现以下提示信息,其中有两次是让用户选择文件生成位置及设置密码的,不输入,直接按三次enter按键,表示路径默认,不需要密码。
1 | Generating public/private rsa key pair. |
【注意】由于写笔记的时候时间比较早,上边的命令生成的秘钥可能会有问题,就是在后边使用git clone命令的时候可能会报以下错误:
1 | ERROR: You're using an RSA key with SHA-1, which is no longer allowed. Please use a newer client or a different key type. |
原来是github对SSH密钥做了升级(Improving Git protocol security on GitHub),原来的SHA-1等一些已经不支持了。所以我们可以生成新的Ed25519密钥对:
1 | ssh-keygen -t ed25519 -C "user's github email address" |
- (3)打开
~/.ssh文件夹
1 | 进入文件夹 |
会发现生成了id_rsa和id_rsa.pub文件,然后我们使用编辑器打开id_rsa.pub文件,并复制所有内容。
- (4)添加
ssh keys到github:【Github】→【登录账号】→【头像】→【Setting】→【SSH and GPG keys】→【SSH keys】→【New SSH key】
添加完毕后会收到一封邮件,表示已经添加成功。
- (5)按
3.1节再次检查是否可以正常连接
1 | ssh -T git@github.com |
四、配置脚本
为了偷懒,我写了一个在ubuntu中配置Git的脚本,由于还带有一些其他功能,就直接看链接吧:my-software-config: 一些软件的配置文件或者系统的配置脚本 (gitee.com)
1. 安装Git
1 | 安装git |
2. 安装SSH服务
1 | 安装ssh-server |
3. 配置Git
1 | 配置git |