Windows Git Bash 配置
本文参考的文章:
- 在 Windows 的 Git Bash 中使用包管理器 - iris (ginshio.org)
- Git bash 安装 pacman & Windows 解压 zst 文件 | 伪斜杠青年 (lckiss.com)
一、Git的安装
Git 的安装应该是都会的,但还是应该说以下,在 Windows 上安装 git 时,实际上是有很多细节需要注意的。
-
选择 git 使用的默认的编辑器
实际上,git 已经在这里说的很明白了,默认 vim 是一个历史原因,推建我们使用更现代的 GUI 编辑器。实际上,你可以使用
core.editor
来修改你想使用的编辑器。当然,如果你不设置这个值,git 会用环境变量中的EDITOR
作为默认编辑器使用,而 Unix 世界中,EDITOR
往往是Vi
或Vim
。最后说一下笔者的习惯,本人比较习惯用
Vim
,因为其插件较多,相对灵活。除了
Vim
外,还有Emacs
、终端编辑器GNU Nano
,图形编辑器Kate
等等,当然,使用你在Windows系统里安装的编辑器也可以,比如VSCode
、Notepad--
等等,因人而异。 -
初始化新仓库时的默认分值名称
我一般选择默认,你可以使用
init.defaultbranch
来更改默认的分支名称。 -
环境变量的作用域
笔者比较习惯第二个选项(Recomended),这样就可以在
cmd
或者powershell
中直接使用git
命令了,而且有些软件由于会引用git
命令,可能需要git
支持,比如野火大学堂
,这样就很方便了,第三个选项要慎重!可能会污染系统本身的环境变量,导致很多自带cmd
或者powershell
的命令被替换为这个Unix环境中的命令。如果你仅仅需要在Git Bash中使用,选第一个即可。
-
换行符转换
如果做跨平台项目,推荐默认第一项。
这也是经常出问题的地方。
也可以设置为 git 不管换行符 (
checkout as-is, commit as-is
),由自己根据项目要求手动关理换行符。可以用core.autocrlf=false
来指定这种方式。其中,as-is
的意思是原本是什么样就是什么样,Git 不会转换换行符。以下这两种方式是最容易出问题的,当原本的换行符被替换时,整个文件将发生冲突。
- Checkout Windows-style, commit Unix-style: 拉取时转换为 Windows 换行符,和用户本地一致,提交时自动转换为 Unix 风格换行符。可以用
core.autocrlf=true
来指定这种方式。 - Checkout as-is, commit Unix-style: 拉取时包持不变,提交时全部转换为 Unix 风格换行符。可以用
core.autocrlf=input
来指定这种方式。
- Checkout Windows-style, commit Unix-style: 拉取时转换为 Windows 换行符,和用户本地一致,提交时自动转换为 Unix 风格换行符。可以用
-
用哪种终端模拟器配合 Git-Bash 使用
推荐使用 MinTTY。
-
选择 git pull 的默认行为
保持默认即可
pull 的行为主要有 rebase、merge 和 fast-forward,主要由变量
pull.rebase
和pull.ff
控制。-
rebase
的行为可以理解为每次都将自己的提交放在 remote 提交之后; -
merge
的行为是将生成一个新的节点; -
fast-forward
则会在一个提交树上类似于 rebase,当出现分叉时行为类似于 merge,如果是ff-only
时只会产生 rebase 行为,出现分叉则会导致命令失败。-
pull.ff=false
git pull --merge # merge
-
pull.ff=true
git pull --merge # merge --ff
-
pull.ff=only
git pull --merge # merge --ff-only
-
pull.rebase=true
git pull # rebase git pull --merge # merge
-
pull.rebase=false
git pull # merge git pull --merge # merge
-
-
二、安装包管理器
安装pacman及其依赖
构建 Unix 环境的第一步就是有一个包管理器,我们直接使用 MSYS 的 pacman 包管理器。下载完成后,将其解压到 Git 的根目录下,在本部分内容里,我们用 /
表示 Git 安装的根目录。
发现提供的包是tar. zst
类型,Windows 上的压缩软件不支持直接解压,于是上 GitHub 找到了一个:https://github.com/mcmilk/7-Zip-zstd/releases,可用于解压。(临时解决方案,如有更好的方案请大佬们告知)
这时的 pacman 还是无法使用的阶段,毕竟 Git 携带的是最小化的环境,并没有 pacman 需要的依赖。不过 msys package 中已经为我们详细列出了其所需的依赖。如果你想知道 Git 安装了哪些软件,可以查看 /etc/package-versions.txt
。
cat /etc/package-versions.txt
所需依赖如下:
- bash >= 4.2.045
- bzip2
- curl
- gettext
- gnupg
- msys2-keyring
- pacman-mirrors
- which
- xz
- zstd
然而,我们并不需要安装列出的所有依赖,因为 Git 已经帮我们安装了一部分了。我们只需要安装 pacman-mirrors 和 msys2-keyring 。
安装的三个东西,一个是 pacman 主包,一个是源,一个是源秘钥。
PS:这就是个先鸡后蛋问题 = =。
更新 pacman
这时候去执行 pacman 不出意外是会不行的,什么签名未信任,无效的数据库,无法锁定数据库之类的,问题不大。
依次执行以下命令:
-
刷新秘钥:
pacman-key --init pacman-key --refresh-keys pacman-key --populat pacman-key --populate msys2 # 和上面一条执行任一个即可
-
清除缓存
pacman -Sc
-
更新系统
pacman -Syu pacman -Syuu # 和上面一条执行任一个即可
-
测试,列出所有软件包
pacman -Sl
-
避免安装不完整,我们接下来用
pacman
安装和更新pacman
,这样就会自动补齐所需软件包和依赖pacman -S pacman pacman -S pacman-mirrors pacman -S msys2-keyring