1. 命令概述

git config 命令主要用于获取和设置 Git 的配置变量。这些变量可以控制 Git 的外观和行为的方方面面,比如用户信息、编辑器偏好、差异比较工具、远程仓库设置等。

Git 的配置存储在三个不同的位置(作用域),它们具有优先级:
1.本地配置--local):默认级别。配置信息存储在当前项目的 .git/config 文件中。此配置仅对当前仓库有效,优先级最高。
2.全局配置--global):配置信息存储在用户家目录下的 ~/.gitconfig(Linux/macOS)或 C:\Users\<用户名>\.gitconfig(Windows)文件中。此配置对当前用户的所有仓库有效。
3.系统配置--system):配置信息存储在系统级文件中,如 /etc/gitconfig(Linux/macOS)或 Git 安装目录下的 etc/gitconfig(Windows)。此配置对所有用户的所有仓库有效,优先级最低。

优先级顺序:本地 > 全局 > 系统。高优先级的配置会覆盖低优先级的配置。

2. 命令格式

基本的命令格式如下:

git config [<scope>] [<options>] <key> [<value>]
  • [<scope>]:可选的作用域,如 --local, --global, --system。如果省略,默认为 --local
  • [<options>]:可选的操作选项,如 --list, --edit, --unset 等。
  • <key>:要操作的配置变量名称。
  • [<value>]:可选,要为配置变量设置的值。

3. 基本用法

3.1 设置配置

这是最常用的功能,例如设置提交代码时使用的作者信息。

# 设置全局用户名和邮箱(推荐第一步就做)
git config --global user.name "Your Name"
git config --global user.email "your.email@example.com"

# 设置当前仓库的特定用户名(比如为公司项目单独设置)
git config --local user.name "Your Company Name"

3.2 查看配置

# 列出当前生效的所有配置(会合并显示系统、全局、本地的配置)
git config --list

# 列出指定作用域的所有配置
git config --global --list
git config --local --list

# 查看某个特定配置项的值
git config user.name
git config --global user.email

3.3 编辑配置

你可以直接打开配置文件进行编辑,这对于批量修改或复杂配置很方便。

# 编辑全局配置文件
git config --global --edit

# 编辑当前仓库的配置文件
git config --local --edit

3.4 删除配置

如果你想移除某个配置项,可以使用 --unset 选项。

# 删除当前仓库的用户名配置
git config --unset user.name

# 删除全局的某个配置
git config --global --unset http.proxy

4.高级用法

4.1 配置别名

别名是 git config 最强大的功能之一,它可以为长命令或常用命令组合创建简短的别名,极大提升效率。

# 将 `git checkout` 简化为 `git co`
git config --global alias.co checkout

# 创建一个单行日志图的别名,非常美观
git config --global alias.lg "log --oneline --graph --decorate --all"

# 创建一个显示最近一次提交的别名
git config --global alias.last "log -1 HEAD"

# 使用别名!现在你可以输入:
git co main        # 等同于 git checkout main
git lg             # 查看漂亮的提交图
git last           # 查看最新的一次提交

4.2 配置默认文本编辑器

当 Git 需要你输入信息时(比如提交时的注释),它会启动一个文本编辑器。

# 设置 VSCode 为默认编辑器
git config --global core.editor "code --wait"

# 设置 Vim 为默认编辑器
git config --global core.editor "vim"

# 设置 Nano 为默认编辑器
git config --global core.editor "nano"

4.3 处理行结束符

在跨平台(Windows/macOS/Linux)协作时,行结束符是一个常见问题。Git 可以自动处理。

# 对于 Windows 用户:检出时转换为 CRLF,提交时转换为 LF
git config --global core.autocrlf true

# 对于 Linux/macOS 用户:检出时不转换,提交时转换为 LF
git config --global core.autocrlf input

# 如果你确信所有参与者都使用 Unix/Linux,可以直接关闭转换
git config --global core.autocrlf false

4.4 配置差异比较与合并工具

你可以配置外部工具来替代 Git 自带的 diff 和 merge。

# 设置 Beyond Compare 为差异比较和合并工具 (示例路径,请根据实际安装路径修改)
git config --global diff.tool bc
git config --global difftool.bc.path "/usr/local/bin/bcomp"
git config --global merge.tool bc
git config --global mergetool.bc.path "/usr/local/bin/bcomp"

# 使用 difftool 代替 diff
git difftool HEAD~1 HEAD

4.5 忽略文件大小写

在 Windows 和 macOS 上,文件系统默认是大小写不敏感的,这可能导致问题。可以强制 Git 区分大小写。

git config core.ignorecase false

4.6 优化仓库性能(适用于大仓库)

# 启用提交图(Commit Graph)来加速 `git log` 等操作
git config core.commitGraph true

# 定期运行 `git gc` 来优化仓库
git config --global gc.auto 256

# 使用一个.git的大项目,如果输入git status 或 git pull有时候会很慢,特别是第一次,可以使用下列命令来优化
git config --global core.checkStat minimal

5. 注意事项

5.1 优先级陷阱

记住配置的优先级。如果你在本地仓库设置了 user.email,它将覆盖全局设置。当你发现提交者信息不对时,首先检查 git config --list 中生效的是哪个配置。

5.2 谨慎使用 --system

修改系统配置通常需要管理员权限,并且会影响机器上的所有用户,在个人开发环境中很少使用。

5.3 配置中的路径

在配置外部工具(如 difftool)的路径时,请确保路径是正确的,并且使用了适合你操作系统的路径格式。

5.4 别名冲突

不要将别名设置为 Git 已有的命令名,否则会覆盖原命令。

5.5 备份配置

你的全局 Git 配置文件(~/.gitconfig)是纯文本文件,可以将其备份到云端,以便在新机器上快速恢复你的工作环境。

6. 补充信息

6.1 查看所有配置的来源

使用 --show-origin 选项可以查看每个配置项来自哪个文件,这在调试配置冲突时非常有用。

git config --list --show-origin

6.2 条件配置

这是一个非常强大的特性,允许你根据仓库的路径来应用不同的配置。例如,为公司项目和个人项目使用不同的邮箱。
在你的全局配置 ~/.gitconfig 中添加:

# 默认使用个人邮箱
[user]
    email = personal@example.com

# 如果仓库路径包含 "/work/",则使用公司邮箱
[includeIf "gitdir:~/work/"]
    path = .gitconfig-work

然后创建一个新文件 ~/.gitconfig-work,内容如下:

[user]
    email = your.name@company.com

这样,所有在 ~/work/ 目录下的 Git 仓库都会自动使用公司邮箱,而其他仓库则使用个人邮箱。

7. 个人常用的配置

# 自定义日期格式
git config --global alias.lg "log --pretty=format:'%C(magenta)%ad%Creset %C(yellow)%h%Creset %s %C(cyan)<%an>%Creset %C(green)%d%Creset' --date=format:'%Y-%m-%d %H:%M'"
Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐