核心Git开发者如何配置Git
几天前,由Scott Chacon撰写了一篇关于Git核心开发人员如何配置他们的Git的文章。这篇文章讨论了一些大多数人可能不知道的Git配置设置,并提出了一些建议,认为这些设置应该成为默认值。接下来,我会通过这篇文章,为你解析一些可能并不为大众所熟知但非常实用的Git配置设置。
TLDR:快速获取设置
如果你对rerere
值或其他历史故事不感兴趣,只想直接获取可以加入到你的~/.gitconfig
文件中的配置,请看以下内容:
# 显著提升Git体验
[column]
ui = auto
[branch]
sort = -committerdate
[tag]
sort = version:refname
[init]
defaultBranch = main
[diff]
algorithm = histogram
colorMoved = plain
mnemonicPrefix = true
renames = true
[push]
default = simple
autoSetupRemote = true
followTags = true
[fetch]
prune = true
pruneTags = true
all = true
# 为什么不用呢?
[help]
autocorrect = prompt
[commit]
verbose = true
[rerere]
enabled = true
autoupdate = true
[core]
excludesfile = ~/.gitignore
[rebase]
autoSquash = true
autoStash = true
updateRefs = true
Git核心开发者如何配置他们的Git?
在深入探讨之前,我们可以先问一个问题:连核心Git开发人员是否都认为某些默认值需要调整?这个问题曾在Git邮件列表上引发了一场有趣的讨论。
Felipe Contreras曾发起一个名为“春季清理”的挑战,邀请Git核心团队成员删除他们所有的配置选项和别名,尝试使用完全未经过修改的Git。他们需要关注哪些设置是真正需要更改的,并将最重要的配置变更分享给社区。最终,参与者们达成了几项几乎一致的建议:
merge.conflictstyle = zdiff3
rebase.autosquash = true
rebase.autostash = true
commit.verbose = true
diff.colorMoved = true
diff.algorithm = histogram
grep.patternType = perl
feature.experimental = true
branch.sort = committerdate
虽然这些设置在几年内并没有成为新的默认值,但可以看出,很多Git开发者依赖它们来更高效地工作。
那么,让我们来逐一了解这些配置的实际作用吧!
第一部分:明显让Git变得更好
这一组设置显著改善了Git的基本体验,几乎没有任何缺点。
列出分支
默认情况下,Git会以字母顺序列出分支,但这往往不是最有用的方式。通过以下两个设置,可以让列表按照最近提交时间排序,并以多列形式显示:
git config --global column.ui auto
git config --global branch.sort -committerdate
这样可以让你更容易找到最近活动过的分支。
列出标签
类似地,默认按字母顺序排列的标签列表也可能不太友好。设置如下可以以版本号排序:
git config --global tag.sort version:refname
这种方式能够更好地反映标签的实际意义。
默认分支名称
为了避免每次初始化仓库时都遇到分支命名问题,可以通过以下命令设定默认分支名称:
git config --global init.defaultBranch main
无论你偏好main
还是master
,只要选择适合自己的就好。
更智能的差异比较
默认的差异算法是1986年提出的Myers算法。虽然可靠,但现代的histogram
算法更为智能:
git config --global diff.algorithm histogram
配合以下设置还可以增强可读性:
git config --global diff.colorMoved plain
git config --global diff.mnemonicPrefix true
git config --global diff.renames true
改进推送体验
启用以下三个推送设置,可以避免许多常见问题:
git config --global push.default simple
git config --global push.autoSetupRemote true
git config --global push.followTags true
改进拉取操作
通过设置自动修剪远程分支和标签,确保本地引用与远程保持同步:
git config --global fetch.prune true
git config --global fetch.pruneTags true
git config --global fetch.all true
第二部分:为什么不试试?
这些设置通常无害,偶尔还能带来帮助。
自动补全提示
启用自动补全功能可以减少拼写错误:
git config --global help.autocorrect prompt
提交时显示差异
在编辑提交信息时显示详细差异,有助于提供更多的上下文:
git config --global commit.verbose true
记录冲突解决方案
如果经常遇到冲突,可以启用rerere
记录解决方案并自动应用:
git config --global rerere.enabled true
git config --global rerere.autoupdate true
全局忽略文件
创建全局忽略文件,避免重复配置:
git config --global core.excludesfile ~/.gitignore
更友好的变基体验
启用以下设置可以优化变基流程:
git config --global rebase.autoSquash true
git config --global rebase.autoStash true
git config --global rebase.updateRefs true
第三部分:各取所需
合并冲突样式
启用zdiff3
合并冲突样式,可以显示冲突前的基础代码,但可能会增加复杂度:
git config --global merge.conflictstyle zdiff3
拉取时默认使用变基
设置pull.rebase=true
后,拉取时会默认执行变基而非合并:
git config --global pull.rebase true
文件系统监控加速
对于大型仓库,启用文件系统监控可以显著加快git status
的速度:
git config --global core.fsmonitor true
git config --global core.untrackedCache true