我的高效Git配置秘籍 😎
视频详细介绍了如何通过配置 Git 别名、全局设置及 Shell 快捷键,打造高效的命令行版本控制工作流。
UP主: NeuroHacks · 时长: 14:03 · 🔗 B站原视频
标签: Git · 开发效率 · 程序员 · 版本控制 · 配置文件
核心配置文件
我想向你展示我是如何配置我的 Git 的,以及我认为最重要的设置,你应该现在就把它们放入你的配置中。首先,让我展示我们将要处理的文件。我对编辑文本文件配置情有独钟,所以我们将不会使用 git config 命令,而是直接生成一个完整的文件。
第一个文件显然是我们的用户 Git 配置文件,位于家目录中的 .gitconfig 文件中。这个文件包含针对你个人的设置,并将在你所有的仓库中使用。第二个文件是我们的用户 .gitignore 文件,位于同一目录中。第三个文件是我最喜欢的,位于同一目录中的提交模板文件。最后一个文件因人而异,是你的用户 Shell 配置文件,如果你使用的是 Zsh,那么它将是 .zshrc,如果你使用的是 Bash,那么它将是 .bashrc 等等。
Shell 快捷键与别名配置
让我们从 Shell 配置开始,因为这样会为我们的生活带来便利。使用 Git 有时需要输入很多内容,例如当我们需要检查当前仓库的状态时,我们需要输入 git status。这不算太多,但如果你做了很多次,可能就不会那么方便。我们将创建一个 git status 的别名,这样我们不需要输入完整的命令,只需输入一个快捷方式。我更喜欢它非常短,只需输入 gs 即可,这使它非常容易输入。因此当我进入目录时,我只需输入两个字母就能检查仓库中发生了什么。我们将这个 alias 添加到我们的 Shell 配置文件中。
实际上,我们也可以为 git status 添加一个短选项,默认情况下,它会以不太紧凑和易读的方式显示信息,但使用短选项,我认为我们可以做得更好。在我们继续配置之前,先添加一些对我来说很常用的 alias:ga 用于 git add 将更改添加到暂存区;gc 用于 git commit 提交它们;gp 用于 git push 将它们推送到远程;gl 用于 git log 检查最新的提交;gb 用于 git branch 检查分支;gco 用于 git checkout 切换分支;gcl 用于 git clone 克隆新仓库。因为 Git 命令现在是两个字母,我可以快速输入它们,比使用 GUI 更快地执行所有操作。
Git 通用选项与性能优化
现在我们可以轻松地调用我们的命令,但有些仍然不是很容易使用,让我们修复这个问题。在配置单独命令之前,先配置 Git 本身,设置一些通用选项。
在 user 部分,设置姓名和电子邮件以识别我的提交。在 core 部分,设置压缩级别为 9,我可以用 CPU 换取速度,节省一些磁盘空间。我还设置了将空格视为错误,如果我尝试提交尾随空格,它会警告我。我设置了预加载索引(preloadindex)为 true,这会将索引加载到内存中,提高性能。在 advice 部分,我喜欢禁用所有建议消息,所以跳过 commitBeforeMerge、pushNonFastForward 和 statusHints 等提示。
URL 快捷方式配置
现在让我们配置一些命令。首先是我们经常做的克隆仓库,而不是经典的 git clone 加上长长的 URL,我们制作了 gcl 快捷键。但这可能是一个很长的字符串,Git 应该给我们一些 URL 快捷方式,这样我们可以缩短它。
例如我经常克隆我自己的仓库或分支,它们通常托管在 GitHub 上,URL 开头通常是 github.com/codingjerks。为了不输入这个长字符串,我在 Git 配置中创建了一个 URL 快捷方式。现在我不需要输入整个 URL,只需加上前缀 cj: 即可。有时候我需要从 GitHub 克隆一个仓库,我经常不记得仓库的名字,尤其是完整的 URL,所以我会从浏览器复制。但在这种情况下,我有 g: 快捷方式帮助我克隆仓库,而不需要记住冗长重复的前缀。最后,在团队仓库中工作时,我有快捷的 radar: 标志,这是我团队的名字。同样,不需要写完整的 URL,我只需写 radar:名称 就可以克隆了。
默认分支与状态显示
下一个命令是 git init。这里没多少需要配置的,但我更喜欢将我的默认分支命名为 dev,这与我的 Git 工作流程配合得很好,所以我们也把它添加到配置中。
接下来当我与团队协作时,我需要经常使用 gs(git status)检查状态。我们已经对它进行了一些更改,但为了提高输出的可读性,我们可以过滤信息。在 status 部分我们有几个选项:我将 branch 设置为 true 以在输出中显示当前分支名;将 stash 设置为 true 以显示 stash 信息;将 showUntrackedFiles 设置为 all 以显示所有未跟踪的文件,而不将它们分组到目录中。这个有点争议,但我喜欢这样。通常如果我有未跟踪的文件,我或者需要忽略它们,或者将它们添加到提交中。在两种情况下,我发现在输出中看到这些具体文件更容易。
Diff 差异对比与高亮
下一个我经常使用的命令,在检查出状态良好后,首先在 Git 中查看差异(diff)。我不喜欢在输出中看到加号和减号,相反,我喜欢使用颜色来突出变化。要禁用加减号,我们可以向配置添加 outputIndicatorNew 和 outputIndicatorOld 参数。
然后在 Git config 的这一部分,我将上下文行数减少,使它更紧凑。我也喜欢设置 renames = copies,这样它会检测重命名和副本,使输出更清洁。我还设置 interHunkContext 为 10,这样新代码块会被分组,使它更容易阅读。为了使输出更好看,我使用 diff-so-fancy 这个高级工具。首先安装它,然后在 pager 部分设置 diff 使用这个工具。进一步在 interactive 部分配置它,我设置 markEmptyLines 为 false,所以代码块中的空行不会被颜色标记。在 color 部分,我设置了自定义颜色,这样输出更容易阅读。
交互式暂存与提交配置
当我知道我的仓库发生了什么,修改了一些文件后,我实际上想使用 ga 或 git add 添加它们。但我通常使用一个允许我在添加到暂存区之前逐个确认更改的命令。我运行 git add -p,这个命令会显示我添加或删除的每一行代码块(chunk),我可以选择使用 y 或 n 将其放入暂存区。有时如果代码块包含太多行,我可以用 s 分割它,或者用 e 手动编辑。
为了改进这个命令,我启用了 diff-so-fancy,所以在 interactive 部分,我将过滤器设置为 diff-so-fancy --patch。我喜欢设置 singleKey 为 true,这样当我需要确认更改时,按 y 或 n 后不需要再按回车。在整理好想要的一切后,为了检查有没有错误地暂存某些东西,我使用 git diff --staged,对我来说快捷键是 gds。
提交模板与信息编写
现在我们有了暂存的更改,我们可以用 git commit 或 gc 提交它们。有时我更喜欢直接在命令行编写提交消息,但有时我更喜欢在真正的代码编辑器中编写。我只需运行 gc 并进入编辑器,在这里写好的提交消息已经相当容易。
但为了使它更容易,我设置了两个选项。第一个是 commit 的 verbose 选项,它会将更多的上下文添加到编写提交消息的文件中,这样我们就可以从 GitHub Copilot 或类似工具中获得更好的提示。另一个选项是模板,我在模板文件中设置它,用于每个新的提交消息。在这个模板文件中,我列出了提交消息的常见前缀示例。在我运行 gc 后,我可以取消注释需要的前缀和我的提交消息。所有这些简化了创建新提交的过程,并允许我更频繁地提交。
推送、拉取与变基设置
现在将更改推送到远程仓库,我们可以使用 git push 或 gp。为了配置它,我将 autoSetupRemote 设置为 true,这样 Git 会自动设置远程跟踪分支,我不需要手动指定它们。将 default 设置为 current,这样如果我没有指定其他内容,它会推送到当前分支。followTags 设置为 true,这样每次也会推送标签,因为我通常使用它们来创建发布。
从远程拉取更改,我使用 git pull 获取更新。在 pull 的配置部分,我又将 default 设置为 current 以拉取当前分支。rebase 设置为 true,如果我们有任何本地更改,我喜欢它们被变基,而不是让 Git 创建合并提交。在 rebase 部分,我将 autoStash 设置为 true,如果我有任何未暂存的本地更改,它们将被自动暂存并在变基后应用。missingCommitsCheck 这个选项会警告我,如果我在交互式变基编辑时不小心删除了一些提交。
Git Log 日志与分支美化
现在让我们优化 Git 日志。git log 或 gl 默认会以不太可读的方式显示大量信息。有一种一行显示的选项可以使其更紧凑,但我更喜欢另一种方式。
首先在 gl 别名中,我添加 --all 标志,这样我可以看到所有引用。然后我添加 --graph 以使其更容易在图表视图中跟踪分支和合并。我喜欢将所有必要的信息放在两行中,通过设置 pretty 格式:第一行中,%h 是提交哈希,%an 是作者名,%ar 是时间戳,%d 是引用名;第二行是 %s 提交消息,最后在提交之间附加新行。
在 log 配置部分,设置 abbrevCommit 为 true 以缩短提交哈希。在 color 部分更新图表颜色,以改善颜色排序和装饰,这样对我来说更容易识别。我也使分支和标签的输出更好看,在 branch 部分进行排序,我将它们设置为按 -committerdate 提交日期和 -taggerdate 标签日期排序,因此最新的分支和标签会首先展示。我也喜欢禁用这些命令的默认分页器(pager),因此在 pager 部分我设置了 branch 和 tag 为 false。
GPG 签名与绿色徽章
最后一点,我喜欢在我的提交记录旁边有一个漂亮的绿色徽章(Badge),所以我用 GPG 设置了提交签名。在 user 部分,我设置了我的签名密钥。最后在 commit 部分,我将 gpgSign 设置为 true,所以我的每个提交都将被签名。
今天就到这里,你可以在我的文件中查看完整的配置,仓库链接在屏幕上和描述中。订阅以获取更多此类视频,我们下期见。