自定义 Git - Git 配置



Git 配置非常重要,因为它定义了 Git 在您的系统上的行为。Git 的配置可以在三个不同的级别指定——**系统、全局**和**本地**。

配置级别

1. 系统级别

  • 配置位于 **[path]/etc/gitconfig**。

  • 包含应用于系统上所有用户和仓库的配置。

  • 要编辑此文件,请使用带有 **--system** 选项的 **git config**。

git config --system <key> <value>

2. 全局级别

  • 配置位于 **~/.gitconfig** 或 **~/.config/git/config** 文件中。

  • 包含应用于当前用户的配置。

  • 要编辑此文件,请使用 **--global** 选项。

git config --global <key> <value>

3. 本地级别

  • 配置位于仓库内的 **.git/config** 文件中。

  • 包含应用于当前仓库的配置。

  • 要编辑此文件,请使用 **--local** 选项或不使用任何选项,因为 **local** 是默认选项。

git config --local <key> <value>

仓库特定设置优先于用户特定设置,用户特定设置优先于系统范围设置。

此设置层次结构适用于每个级别。

基本客户端配置

Git 配置选项有两种类型:服务器端和客户端。

大多数设置是客户端设置,用于确定个人工作偏好。

尽管有许多可能性,但这里只讨论最流行和最实用的设置。

使用以下命令查看我们 Git 版本的全部选项列表

man git-config

core.editor

  • Git 默认情况下使用由 **VISUAL** 或 **EDITOR** 环境变量设置的文本编辑器,或者将默认编辑器设置为 vi 用于编辑提交和标签消息。

使用 **core.editor** 选项修改当前默认编辑器。

git config --global core.editor emacs

无论我们的首选 shell 编辑器是什么,Git 都将使用 Emacs 修改消息。

commit.template

Git 允许我们选择一个文件作为创建提交时默认的第一个消息,方法是使用 **commit.template** 变量。

  • 此模板文件可以包含有关我们打算使用的提交消息结构和样式的提醒和说明。

  • 每次提交时,我们都可以通过使用提交模板来提醒自己或他人预期的消息格式,这有助于确保一致性。

  • 提交模板作为一条有用的提醒,以保持主题行简短,在其下方提供指向任何相关问题或错误跟踪器票证的链接,并添加描述性信息。

在 Git 中配置 **commit.template** 值以建立默认提交消息模板。

git config --global commit.template ~/.taskmessage.txt
git commit

core.pager

  • 可以使用 Git 的 **core.pager** 设置配置显示来自 **git log** 和 **git diff** 等命令的输出的分页程序。

  • 它最初设置为 **less**,但我们可以将其修改为使用其他分页程序,或者通过将其设置为空字符串(**''**)来完全关闭分页。

  • 如果禁用分页,Git 将打印整个输出,无论其长度如何,都不会暂停。

git config --global core.pager ''

user.signingkey

  • 当我们使用 Git 的 **user.signingkey** 参数(允许我们提供一个 GPG 密钥)时,更容易使用默认密钥来签名带注释的标签。

我们使用此命令来设置它

git config --global user.signingkey 

将 **<gpg-key-id>** 替换为我们的 GPG 密钥 ID。

配置 **user.signingkey** 后,我们可以使用 **git tag -s <tag-name>** 命令来签名标签,而无需每次都提供我们的密钥。

git tag -s <tag-name>

core.excludesfile

  • 使用 Git,我们可以为应该在我们的机器上所有仓库中忽略的模式(例如 **.DS_Store** 文件或临时编辑器文件,如 **~** 或 **.swp**)提供一个全局忽略文件,方法是使用 **core.excludesfile** 设置。

  • 项目特定的 **.gitignore** 文件从中受益。

  • 我们可以使用 **core.excludesfile** 参数创建一个全局 **.gitignore** 文件(例如 **~/.gitignore_global**),为我们希望 Git 在所有仓库中忽略的文件提供模式。

Git 将不会跟踪或暂存与全局忽略文件中指定的模式匹配的文件,我们使用 **git config --global core.excludesfile ~/.gitignore_global** 来配置它。

*~
.*.swp
.DS_Store

help.autocorrect

没有 **help.autocorrect**:如果我们写错了命令,Git 会识别最有可能正确的命令,但不会执行它。

启用 **help.autocorrect** 后,如果我们将其设置为非零值,Git 将在短暂延迟后自动执行最接近匹配的命令。

例如,如果我们将其设置为 20(或两秒钟),我们将得到

git config --global help.autocorrect 20
git commt -m "Fix bug"
WARNING: You called a Git command named 'commt', which does not exist.
Continuing under the assumption that you meant 'commit'
in 2 seconds automatically...

Git 中的颜色

Git 提供彩色终端输出,使命令结果更容易阅读,并帮助区分不同类型的数据。

我们可以使用各种设置选项来更改颜色以符合我们的品味。

此功能有助于更快、更清晰地解释 Git 输出。

color.ui

Git 中的 **color.ui** 设置控制是否使用彩色输出。

要禁用所有彩色终端输出,我们可以使用以下命令将其设置为 false:

git config --global color.ui false
  • 当输出定向到终端时,Git 默认情况下应用颜色;否则,它会省略颜色代码。

  • 当输出路由到文件或管道时,会应用颜色代码。

  • 虽然很少需要,但我们可以将其设置为 **always** 以在所有输出中包含颜色代码。

或者,我们可以根据需要使用命令的 **--color** 参数在重定向输出中强制使用颜色。

color.*

Git 提供了诸如 **color.branch**、**color.diff**、**color.interactive** 和 **color.status** 等命令特定的颜色选项,为用户提供了广泛的颜色灵活性。

我们可以将每个设置设置为 **true**、**false** 或 **always** 来调整在某些 Git 操作中如何使用颜色。

color.branch
color.diff
color.interactive
color.status

Git 使用子设置允许我们更改单个命令输出段的颜色。

例如,要将 diff 输出中的额外行格式化为带有黄色背景和绿色文本的粗体格式,请使用

git config —global color.diff.new "green yellow bold"

我们可以从红色、蓝色或青色等颜色以及粗体、暗淡或下划线等属性中进行选择。

格式和空格

在协作开发中,格式和空格问题可能具有挑战性,尤其是在跨不同平台工作时。

不同系统上的不同换行符或编辑器设置可能会导致间距的细微差异。

Git 提供配置选项来帮助处理和解决这些问题。

core.autocrlf

Git 使用 **core.autocrlf** 参数处理不同操作系统之间的换行符问题。

  • 要在检出代码时自动将换行符 (LF) 结尾转换为回车符 + 换行符 (CRLF),并在将文件添加到索引时将其转换回 LF,请在 Windows 上将其设置为 **true**。

  • 通过这样做,避免了由不同平台上的不同换行符引起的难题。

git config --global core.autocrlf true

要在提交时让 Git 将 CRLF 结尾更改为 LF,而不在检出时将 LF 转换回 CRLF,请在 Linux 或 macOS 上(其中 LF 换行符是标准)将 **core.autocrlf** 设置为 input。

这在 Windows 检出中保留了 CRLF,但保证了仓库和 macOS/Linux 上的 LF 结尾。

git config --global core.autocrlf input

当 **core.autocrlf** 设置为 input 时,在 Windows 检出中保留 CRLF 结尾,同时在仓库和 macOS/Linux 上确保 LF 结尾。

如果我们希望为仅限 Windows 的项目在仓库中保留 CRLF 结尾,请将 **core.autocrlf** 设置为 false。

git config --global core.autocrlf false

core.whitespace

Git 使用六个主要的检查来识别和解决空格问题。

它默认情况下会激活对制表符之前的空格、文件末尾的空行和行尾的空格的检查。

  • 默认情况下,对行尾的回车符、缩进中的制表符和空格代替制表符的检查被禁用。

  • 使用 **core.whitespace** 配置要启用或禁用的检查。

  • 选项名称应以逗号分隔,**-** 表示禁用选项。

  • 例如,我们可以将其设置为启用除制表符之前的空格检查之外的所有内容。

git config --global core.whitespace \
    trailing-space,-space-before-tab,indent-with-non-tab,tab-in-indent,cr-at-eol

我们可以在 **core.whitespace** 设置中仅指定要自定义的部分,而无需列出所有选项。

git config --global core.whitespace \
-space-before-tab,indent-with-non-tab,tab-in-indent,cr-at-eol

Git 通过在 **git diff** 期间检测和颜色编码来帮助我们在提交之前解决空格问题。

使用 **--whitespace=warn** 或 **--whitespace=fix**,我们可以在使用 **git apply** 应用补丁时自动解决空格问题或接收警告。

重写提交时,还可以使用 **--whitespace=fix** 选项来解决 **git rebase** 的空格问题。

git apply --whitespace=warn <patch>
git apply --whitespace=fix <patch>

服务器配置

receive.fsckObjects

Git 可以通过检查对象的 SHA-1 校验和以确保它指向一个真实的 对象,在推送期间确认对象的完整性。

由于此验证可能对性能造成影响,尤其是在处理大型代码库时,因此默认情况下它是禁用的。

receive.fsckObjects设置为true,以便在每次推送后执行此检查。

git config --system receive.fsckObjects true

receive.denyNonFastForwards

如果我们重新整理已经推送的提交,然后尝试再次推送(而这些提交不在远程分支上),Git 将拒绝推送。

使用-f标志可以克服这个问题并强制更新远程分支。

receive.denyNonFastForwards设置为true以阻止这些强制推送。

git config --system receive.denyNonFastForwards true

receive.denyDeletes

receive.denyDeletes设置为true,以阻止用户删除分支或标签作为denyNonFastForwards策略的变通方法。

git config --system receive.denyDeletes true

为了删除远程分支,必须手动从服务器删除引用文件,因为此选项阻止任何分支或标签的删除。

创建别名

可以为各种 Git 命令创建快捷方式或别名。请参考以下命令

git config --global alias.co checkout
git config --global alias.br branch
git config --global alias.ci commit

查看配置

要查看当前配置,可以运行以下命令

# Lists all configurations
git config --list

# Lists global configurations
git config --global --list

# Lists local configurations
git config --local --list

正确的 Git 配置可以增强您的工作流程并提高协作效率。

广告