安装 Git 后通常还需要做一次基础配置。最重要的是提交姓名和邮箱;默认分支、编辑器、换行方式与凭据管理则根据系统和工作习惯设置。配置之前先看现状,配置之后再核对结果,可以避免同一个选项在不同位置重复出现。
查看已有配置
在 PowerShell 中运行:
git config --list --show-origin --show-scope
输出中的 scope 表示配置范围,origin 表示配置来自哪个文件。常见范围有三种:
| 范围 | 命令选项 | 影响对象 |
|---|---|---|
| system | --system |
这台电脑上的所有用户 |
| global | --global |
当前用户的所有仓库 |
| local | --local |
当前仓库 |
这里的 --system、--global 和 --local 是 git config 命令的选项,也常被口头称作命令参数;它们不是环境变量。PowerShell 中 $env:NAME 这种写法才是在设置环境变量。
同一个配置项可以同时出现在多个范围中。读取时,local 覆盖 global,global 覆盖 system。因此,个人通用设置通常写在 global,只有某个仓库不同的设置才写在 local。
查看单个配置项及其来源:
git config --show-origin --show-scope --get user.email
配置提交姓名和邮箱
姓名和邮箱会写入每一次 commit。它们不是 GitHub 等代码托管平台的登录账号或密码,但托管平台会根据邮箱把 commit 关联到账号。
为当前用户的所有仓库设置:
git config --global user.name "Example User"
git config --global user.email "[email protected]"
如果工作仓库与个人仓库使用不同身份,进入对应仓库后写入 local 配置:
Set-Location C:\work\project
git config --local user.name "Work User"
git config --local user.email "[email protected]"
local 配置保存在仓库的 .git/config 中,只影响这个仓库。
检查当前仓库最终采用的身份:
git config user.name
git config user.email
git var GIT_AUTHOR_IDENT
如果邮箱需要隐藏,可以使用代码托管平台提供的 noreply 邮箱。不要把访问令牌写进 user.email 或远端 URL。
设置默认分支
让新建仓库默认使用 main:
git config --global init.defaultBranch main
main、origin 和 origin/main 不是同一种名称:
| 名称 | 含义 |
|---|---|
main |
当前本地仓库中的一个分支 |
origin |
远端仓库在本地的简称 |
origin/main |
最近一次 fetch 后,本地记录的远端 main 状态 |
早期新仓库的默认分支通常叫 master,现在许多平台和项目改用 main。init.defaultBranch 只决定以后执行 git init 时创建的初始分支名,不会重命名已有仓库,也不会强迫 clone 下来的仓库使用 main。git clone 会跟随远端仓库已经设置的默认分支。
查看当前本地分支、远端简称和远端默认分支:
git branch --show-current
git remote -v
git remote show origin
origin 只是惯用名称,并不是 Git 的保留字。git clone 通常自动使用这个名称;手动添加远端时也可以取其他名字。
已有本地仓库仍使用 master,并且已经确定要改名时:
git branch -M main
git push -u origin main
第一条命令重命名当前本地分支,第二条把 main 推送到名为 origin 的远端并建立跟踪关系。远端托管平台的默认分支还需要在仓库设置中改为 main;确认协作者和自动化任务都已切换后,再考虑删除旧的 master 分支。
设置编辑器和拉取方式
如果使用 Visual Studio Code 编辑提交信息:
git config --global core.editor "code --wait"
--wait 会让 Git 等到编辑器窗口关闭后再继续执行。也可以换成自己已经安装并能从终端启动的编辑器。
经常需要统一 commit message 格式时,还可以准备一份模板:
git config --global commit.template ~/.gitmessage
模板文件适合放标题格式、检查清单或注释提示,不要写入项目机密。没有固定格式要求时可以跳过这项配置。
拉取远端更新时,Git 可以执行 merge 或 rebase。希望 git pull 默认合并时设置:
git config --global pull.rebase false
这不是所有项目都必须设置的统一答案。团队已经规定 rebase 工作流时,应遵循仓库约定。
配置换行方式
Windows 常用 CRLF,Linux 和 macOS 常用 LF。Git 可以在工作区和仓库之间转换换行符,相关配置是 core.autocrlf。
在 Windows 上,希望工作区使用 CRLF、提交到仓库时规范为 LF,可以设置:
git config --global core.autocrlf true
如果希望工作区也保持 LF,可以设置:
git config --global core.autocrlf input
完全不让 Git 根据该选项自动转换时使用:
git config --global core.autocrlf false
团队项目最好在仓库中提交 .gitattributes,直接规定不同文件使用哪种换行:
* text=auto
*.sh text eol=lf
*.ps1 text eol=crlf
.gitattributes 随仓库分发,比每位成员各自的 global 配置更可靠。查看 Git 当前识别的换行状态:
git ls-files --eol
修改换行策略后,不要直接提交突然出现的大量改动。先用 git diff 确认内容变化,再决定是否需要重新规范已有文件。
使用凭据管理器
HTTPS 远端需要保存登录凭据时,应使用系统的凭据管理器,不要把密码或访问令牌直接写入 Git 配置。
Git for Windows 通常已经配置 Git Credential Manager。检查当前设置:
git config --show-origin --get credential.helper
需要为当前用户明确启用时,可以运行:
git config --global credential.helper manager
不同 Git for Windows 版本可能显示 manager、manager-core 或由安装程序写入的其他名称。已有配置能够正常认证时,不必为了统一名称而覆盖它。
SSH 远端不使用这个 HTTPS 凭据流程,而是通过 SSH key 认证。
按需配置网络代理
只有当前网络确实需要代理时才设置。HTTP 与 HTTPS 可以分别配置:
git config --global http.proxy http://127.0.0.1:7890
git config --global https.proxy http://127.0.0.1:7890
代理软件没有运行、端口改变或切换网络后,旧代理会导致 fetch 和 clone 失败。清除代理:
git config --global --unset http.proxy
git config --global --unset https.proxy
检查是否仍有其他范围的代理配置:
git config --show-origin --show-scope --get-regexp "^(http|https)\..*proxy$"
代理地址、公司内网地址和私有仓库 URL 不应原样贴到公开的故障记录中。
安装程序维护的配置不必手工复制
Git for Windows 会在 system 范围写入部分平台配置,例如 HTTPS 后端、文件系统缓存、符号链接行为和系统凭据组件。这些设置与安装方式和 Git 版本有关,重新安装时通常会自动生成,不适合从另一台电脑的 system.gitconfig 整份复制。
安装并初始化 Git LFS 后,它会添加所需的 filter 配置:
git lfs install
可以检查是否安装成功:
git lfs version
git config --get-regexp "^filter\.lfs\."
filter.lfs.clean、filter.lfs.smudge 和 filter.lfs.process 等配置应由 Git LFS 管理,不需要从另一台电脑的配置文件中逐行复制。
还有两类配置不应当作为“装完 Git 就设置”的通用步骤:
safe.directory只在 Git 因仓库所有权而明确报错,并且已经确认该路径可信时添加;http.postBuffer不是网络问题的常规修复方法,不应仅因为 clone 或 push 失败就盲目调大。
最后核对
基础配置完成后再次运行:
git config --list --show-origin --show-scope
重点确认:
user.name和user.email是准备写入 commit 的身份;- 某个仓库若有 local 配置,它是否有意覆盖 global;
core.autocrlf与仓库的.gitattributes是否协调;credential.helper是否来自正常安装的凭据管理器;- 不需要代理时,配置中没有遗留的
http.proxy或https.proxy。
删除某项配置时,使用与写入时相同的范围。例如:
git config --global --unset user.email
git config --local --unset user.email
这样只移除目标配置项,不会误删整份 Git 配置文件。
完整配置文件参考
下面三份文件组成一套 Windows 环境下的参考配置。system 由 Git for Windows 和 Git LFS 安装程序维护,global 保存个人长期设置,local 则由 git init、git clone、git remote 和分支跟踪命令在具体仓库中生成。
这些文件用于理解最终结构,不应整份覆盖现有配置。姓名、邮箱和远端 URL 需要换成自己的信息;不需要的功能应直接省略。
System:整台电脑
常见位置为 Git 安装目录中的 etc/gitconfig。普通用户通常只读,不手工编辑:
[diff "astextplain"]
textconv = astextplain
[filter "lfs"]
clean = git-lfs clean -- %f
smudge = git-lfs smudge -- %f
process = git-lfs filter-process
required = true
[http]
sslBackend = schannel
[core]
fscache = true
symlinks = false
[credential]
helper = manager
astextplain、schannel、文件系统选项和 LFS filter 都与 Windows 安装环境有关。实际文件可能因 Git 版本、安装选项以及是否安装 Git LFS 而不同。
Global:当前用户
Windows 上通常保存在用户目录的 .gitconfig:
[user]
name = Example User
email = [email protected]
[init]
defaultBranch = main
[core]
editor = code --wait
autocrlf = true
[pull]
rebase = false
[commit]
template = ~/.gitmessage
如果没有准备 ~/.gitmessage,应删去 commit.template。团队使用 .gitattributes 且编辑器统一写入 LF 时,也可以根据前文说明把 core.autocrlf 改为 input 或 false。
代理不是基础配置的一部分。确实需要时才在 global 中增加,并在更换网络后及时清除:
[http]
proxy = http://127.0.0.1:7890
[https]
proxy = http://127.0.0.1:7890
Local:当前仓库
保存在仓库的 .git/config。下面展示普通非 bare 仓库、一个名为 origin 的远端,以及本地 main 对远端 main 的跟踪关系:
[core]
repositoryformatversion = 0
filemode = false
bare = false
logallrefupdates = true
symlinks = false
ignorecase = true
[remote "origin"]
url = https://example.invalid/example/project.git
fetch = +refs/heads/*:refs/remotes/origin/*
[branch "main"]
remote = origin
merge = refs/heads/main
这份 local 配置通常不需要手写:
git init创建[core];git clone或git remote add origin <URL>创建[remote "origin"];git push -u origin main或设置 upstream 后创建[branch "main"]。
如果某个仓库需要不同的提交身份,可以在 local 文件中额外出现一段 [user],它会覆盖 global 身份:
[user]
name = Work User
email = [email protected]
凭据、访问令牌和密码不应出现在这三份配置文件中;交给 Git Credential Manager 或 SSH key 管理。