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 |