Git
在三、四、五、六线城市以及像浪子所在的偏远小山村中想要直接使用浏览器访问 GitHub 是有问题的,输入网址后按下回车键,这个页面都不带刷新的,会直接出现 “无法访问该网站” 的错误。解决办法之一就是修改 hosts
文件,加速访问这个体验并不明显,只是可以访问,偶尔抽风是正常的。
- Windows 系统,该文件在
C:\Windows\System32\drivers\etc
目录下; - Linux 系统,则在
/etc/hosts
。
Windows 推荐火绒,修改 hosts 文件超级方便。建议先对 hosts 文件备份,修改错误后可以还原。
访问 IPAddress.com,输入 github.com
回车查询。将获取到的 IP 与 Github 的域名写入到 hosts 文件中,例如:
1 | 140.82.113.4 github.com |
配置基本信息
可选配置
1 | # git 提交显示中文 |
1 | # 配置个人信息 |
检入:提交,检出:下载
在 Git 执行配置的时候有一些选项:
--local
仅指定当前本地 git 仓库
--global
指定所有当前用户的 git 仓库
--system
指定当前系统的所有 git 仓库(很少使用)
配置多个平台 SSH
1. 生成Github用的SSH-Key
1 | # Linux Mac |
2. 生成gitee使用的SSH-Key
1 | # Linux Mac |
2022-08-22 修改为使用 ed25519 算法生成。
ssh-keygen 支持的部分选项说明:
选项 | 说明 |
---|---|
-b | 该选项指定密钥的位数。管理 SSH 用例的算法可能要求使用特定的密钥长度。一般来说,RSA 密钥使用 2048 位就足够了。 |
-t | 指定要创建的 key 的类型,常见的有 RSA、DSA、ECDSA 等 |
-f | 指定存储创建密钥的文件名。 |
-C | 描述密钥的作用/说明 |
3. 配置 config
config 中的配置说明:
1 | Host [git.domain.com] |
- 空行和以“#”开头的行是注释。
- 每行都以关键字开头,后跟参数。
- 配置选项可以用空格或可选空格分隔,并且正好是一个
=
。- 参数可以用双引号
"
括起来,以指定包含空格的参数。SSH 其它可选参数配置详见:https://www.ssh.com/academy/ssh/config
SSH 配置按照以下顺序读取文件:
- 从命令行指定的选项。
~/.ssh/config
中定义的选项(用户配置)。/etc/ssh/ssh_config
中定义的选项(全局配置)。
1 | # github1 |
如果同一个平台配置了多个不同账号的SSH密钥,那么在进行 clone、remote 等操作时,地址需要做一些改变,否则会找不到而报错。在克隆时 git@github.com:user/repo.git
需要替换为对应的 Host
内容。
例如 clone github2 账户的某个仓库:
1 | git clone git@github.com-repo2.com:user/repo.git |
4. 测试是否配置成功
1 | # 使用 ssh -T 进行测试,成功的话会打印 Hi,username…… |
5. Windows 下 Git Bash 的一些配置
Windows 中不论是 cmd 还是 Powershell,浪子都不是很喜欢用,而 Git Bash 使用起来非常不错,基本和 Linux 使用方式保持一致(路径除外,这是一个问题)。所以浪子的电脑一般都使用的是 Git Bash。Windows 中的 Git-Bash 如果想要用的舒服,还是需要额外的配置,这里补充几个配置。
5.1 tree
Win 中的默认的 tree 命令功能有限,远远达不到需求。所以我们需要额外安装一个,让它更好用!
下载tree的二进制文件 后解压,把 bin
目录下的 tree.exe
文件复制到 Git 安装目录 xxx/Git/usr/bin/
下即可。当然,直接解压后添加到环境变量也可以,这样 Windows 全局的终端都可以用,看个人喽!
1 | # 显示 num 层的目录 |
常用选项:
选项 | 说明 |
---|---|
-a | 显示所有文件夹 |
-A | 使用ASNI绘图字符显示树状图而非以ASCII字符组合。 |
-C | 目录添加颜色 |
-D | 显示修改时间 |
-i | 不以阶梯状列出文件或目录名称 |
-s | 显示文件大小 |
5.2 Git Bash 编码修改为 utf-8、设置别名
修改 Git 安装目录下的 /Git/etc/bash.bashrc
文件,在最后加入下面的内容,保存退出,重启 git-bash 即可。
1 | # 设置别名命令 |
5.3 使用 Starship 美化 Git Bash
-
在 Starship 的 Release 页面下载最新版的
msi
安装程序进行安装(这会自动添加环境变量,绿色版安装需要自行添加)。 -
下载安装一款你喜欢的 Nerd Font 字体,并在
C:\Users\yourname\.minttyrc
文件中配置以便在 Git Bash 可以更好的显示。注意: 这里只是修改原生的 Git Bash 字体。如果使用了其它的工具集成了 Git Bash(例如 windows terminal、vscode、idea 等),则此配置不会生效。需要在这些集成工具中自行配置,修改字体设置上面的三种工具都支持,非常简单,这里不再赘述。~/.minttyrc 1
Font=JetBrainsMono Nerd Font
-
打开 Git 的配置文件:
xxx/Git/etc/bash.bashrc
,滑倒最后,添加以下内容:D:\xxx\Git\etc\bash.bashrc 1
2
3# Uncomment to use the terminal colours set in DIR_COLORS
# eval "$(dircolors -b /etc/DIR_COLORS)"
eval "$(starship init bash)" -
重启 Git Bash 就可以看到默认效果啦!自定义样式可以参考 Starship 官方文档,如果是新手,可以在 社区分享 中寻找自己喜欢的主题。浪子这里放一个自己使用的 Starship 主题。
- Nerd Font 字体是在原有字体的基础上上添加了一些图标、emoji 和一些额外的“扩展”,可以显示特殊字符以及一些 icon。
- Git Bash 没有根据输入 自动建议 的功能(参考 Starship 官网主页的建议效果图),这和使用的 bash 有关。想要同样的效果,请考虑使用 zsh、fish、oh my zsh 等其它支持的终端工具。
- VsCode(建议使用最新版) 使用 starship 美化了的 Git Bash 时,如果是 1.70.x ~ 1.90.0 版本,需要在 settings.json 中添加 “terminal.integrated.shellIntegration.enabled”: false, 禁用 vscode 自动注入的终端集成。如不设置,在 vscode 中打开终端和执行命令后都需要等待较长时间(vscode 会自动注入终端集成,搜索需要花费一定的时间)。
5.4 jq
Release 页面下载符合自己计算机架构的软件,以 Windows 为例,下载 jq-windows-amd64.exe 后改为 jq.exe
,同样放到 Git 安装目录的 /usr/bin
路径下。
GPG
GPG 是什么、能干什么还是自己去查资料吧,浪子知道的不多,只知道可以用来 加密、签名,还是一种身份认证,Github 上通过 GPG 还可以点亮一个绿色的小图标,既然有身份验证的功能,自然也是可以代替 SSH 的,就是配置较为麻烦。GPG 还有什么联网、离线等许多概念,反正是很强的。浪子也还没搞明白,主要日常用的不多。。。
[Gitee] 上有篇文章专门写了如何配置 GPG 密钥,想要使用替代 SSH 的用户可以参考。
常用命令
1 | # 生成 gpg |
子密钥拿出来单独说,因为下面的命令会进入 gpg bash 环境。
1 | # 生成子密钥,使用下面的命令会进入 gpg bash |
- gpg --full-generate-key:一个更加详细的密钥生成选项,推荐生成时优先选择。它会提供更多的选项,例如选择密钥算法、设置密钥长度、过期时间等。虽然 GPG 本身支持生成多种算法密钥,但是平台不一定支持那么多,具体使用需要参照多方,总的来说 RSA 目前使用广泛。
- 日常中推荐使用子密钥,并生成一份对应的撤销证书。有了这个撤销凭证,可以在没有密码的情况下,将对应的公钥声明为失效。
另外,本文的 gpg_id 和其它文章的 keyid 等价,user_id 一般是生成 gpg 时的 name(Real name)或者邮箱,可以替换使用。例如上面的命令都是使用的 gpg_id,你也可以换为 user_id,都是一样的
有多种方式 获取 gpg_id,下面只是其中一种方式,也是最简单的方式。
1 | # 查看 gpg 列表 |
上面的 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 就是 gpg_id。而 [ultimate] 后面的 jhlz 就是 user_id(如果生成时有 comment,后面会有括号,括号内显示备注)。比如下面的内容
1 | $ gpg -k |
加密
1 | # 加密文件 |
armor 选项代表生成明文,默认生成二进制。–output 输出文件,–export 打印到控制台
签名
签名主要用来验证消息的发送人,确认该信息是否真的出自某人之手。
1 | # 文件签名 |
使用他人的公钥加密信息
1 | # 导入他人 gpg 公钥文件 |
举个小栗子
因为没有上传到服务器,所以就没有对应的 gpg 指纹。这里放了一个 gpg 公钥的内容。你可以复制公钥的内容,在自己的系统上创建一个文本并把以下内容复制进去,然后导入到你的系统中,通过指纹验证后(指纹就是非缩写的 gpg_id 四位为一组分开)就可以使用该公钥加密要发送给浪子的信息,或者是验证签名。
1 | -----BEGIN PGP PUBLIC KEY BLOCK----- |
由于 GPG 可以由他人上传,例如我冒充胡歌上传了一个 GPG(这其实并不是他传的),这样其实也不好追溯
指纹不要随便公开,指纹是 Hash 值,存在 Hash 碰撞,那么就可以被伪造,不安全
如果 Github 中使用 GPG 代替 SSH(浪子不是很推荐,使用还很麻烦。。。),虽然这可以让你的 Github 提交多一个很有精神的图标,保证来自本人的提交。
1 | # -S 使用 GPG 验证提交,需要输入创建 GPG 的密码 |