📚 文稿库

我的高效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 工作流程配合得很好,所以我们也把它添加到配置中。

接下来当我与团队协作时,我需要经常使用 gsgit status)检查状态。我们已经对它进行了一些更改,但为了提高输出的可读性,我们可以过滤信息。在 status 部分我们有几个选项:我将 branch 设置为 true 以在输出中显示当前分支名;将 stash 设置为 true 以显示 stash 信息;将 showUntrackedFiles 设置为 all 以显示所有未跟踪的文件,而不将它们分组到目录中。这个有点争议,但我喜欢这样。通常如果我有未跟踪的文件,我或者需要忽略它们,或者将它们添加到提交中。在两种情况下,我发现在输出中看到这些具体文件更容易。

Diff 差异对比与高亮

下一个我经常使用的命令,在检查出状态良好后,首先在 Git 中查看差异(diff)。我不喜欢在输出中看到加号和减号,相反,我喜欢使用颜色来突出变化。要禁用加减号,我们可以向配置添加 outputIndicatorNewoutputIndicatorOld 参数。

然后在 Git config 的这一部分,我将上下文行数减少,使它更紧凑。我也喜欢设置 renames = copies,这样它会检测重命名和副本,使输出更清洁。我还设置 interHunkContext 为 10,这样新代码块会被分组,使它更容易阅读。为了使输出更好看,我使用 diff-so-fancy 这个高级工具。首先安装它,然后在 pager 部分设置 diff 使用这个工具。进一步在 interactive 部分配置它,我设置 markEmptyLines 为 false,所以代码块中的空行不会被颜色标记。在 color 部分,我设置了自定义颜色,这样输出更容易阅读。

交互式暂存与提交配置

当我知道我的仓库发生了什么,修改了一些文件后,我实际上想使用 gagit 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 commitgc 提交它们。有时我更喜欢直接在命令行编写提交消息,但有时我更喜欢在真正的代码编辑器中编写。我只需运行 gc 并进入编辑器,在这里写好的提交消息已经相当容易。

但为了使它更容易,我设置了两个选项。第一个是 commit 的 verbose 选项,它会将更多的上下文添加到编写提交消息的文件中,这样我们就可以从 GitHub Copilot 或类似工具中获得更好的提示。另一个选项是模板,我在模板文件中设置它,用于每个新的提交消息。在这个模板文件中,我列出了提交消息的常见前缀示例。在我运行 gc 后,我可以取消注释需要的前缀和我的提交消息。所有这些简化了创建新提交的过程,并允许我更频繁地提交。

推送、拉取与变基设置

现在将更改推送到远程仓库,我们可以使用 git pushgp。为了配置它,我将 autoSetupRemote 设置为 true,这样 Git 会自动设置远程跟踪分支,我不需要手动指定它们。将 default 设置为 current,这样如果我没有指定其他内容,它会推送到当前分支。followTags 设置为 true,这样每次也会推送标签,因为我通常使用它们来创建发布。

从远程拉取更改,我使用 git pull 获取更新。在 pull 的配置部分,我又将 default 设置为 current 以拉取当前分支。rebase 设置为 true,如果我们有任何本地更改,我喜欢它们被变基,而不是让 Git 创建合并提交。在 rebase 部分,我将 autoStash 设置为 true,如果我有任何未暂存的本地更改,它们将被自动暂存并在变基后应用。missingCommitsCheck 这个选项会警告我,如果我在交互式变基编辑时不小心删除了一些提交。

Git Log 日志与分支美化

现在让我们优化 Git 日志。git loggl 默认会以不太可读的方式显示大量信息。有一种一行显示的选项可以使其更紧凑,但我更喜欢另一种方式。

首先在 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,所以我的每个提交都将被签名。

今天就到这里,你可以在我的文件中查看完整的配置,仓库链接在屏幕上和描述中。订阅以获取更多此类视频,我们下期见。

On this page