git配置文件(如.gitconfig)仅存行为设置,不存数据;真正需备份的是凭证(如~/.git-credentials或系统凭据库)、ssh密钥(~/.ssh/)、gpg密钥(~/.gnupg/)、全局忽略文件及环境变量等外部依赖项。

Git配置文件本身不存数据,真正要备份的是 .gitconfig 和凭证、SSH密钥等关联项
Git 的配置文件(如 ~/.gitconfig 或 %USERPROFILE%\.gitconfig)只是纯文本,不包含仓库数据或历史记录。它只控制行为:默认分支名、编辑器、换行符策略、别名等。真正影响“数据迁移成败”的是那些 Git 依赖但不直接写在 .gitconfig 中的外部组件:
-
git-credential存储的密码或 token(比如git config --global credential.helper store写入的~/.git-credentials) - SSH 私钥(
~/.ssh/id_rsa等)——如果用 SSH 协议克隆/推送 - GPG 密钥(
~/.gnupg/)——如果启用 commit 签名 - 全局
core.excludesfile指向的忽略规则文件(如~/.gitignore_global)
迁移前必须检查 git config --list --show-origin 查清所有配置来源
Git 配置分三层:系统级(/etc/gitconfig)、用户级(~/.gitconfig)、仓库级(.git/config)。不同层级可能覆盖同一选项,仅复制 ~/.gitconfig 会漏掉系统级别设置(比如公司统一配的 core.autocrlf),也可能被新环境的系统配置意外覆盖。
- 运行
git config --list --show-origin,输出每行开头会标出该配置来自哪个文件 - 重点关注重复出现的 key(如多个
user.name),确认最终生效的是哪一层 - 若目标机器有预装 Git(如 macOS 自带或 Git for Windows),其
/etc/gitconfig可能含默认值,迁移时需手动比对
凭证和密钥不能靠 .gitconfig 备份,必须单独导出和校验
.gitconfig 里只有 credential.helper 的类型声明(如 manager、osxkeychain、store),实际凭据存在操作系统凭据库或明文文件中。迁移后若没同步这些,git push 会卡在认证环节。
- Windows:用
cmdkey /list查看 Git 凭据是否存于 Windows Credential Manager;导出需用 PowerShell 脚本调用CredentialManager模块(原生命令不支持批量导出) - macOS:凭据在钥匙串(Keychain),名称通常含
git:https://github.com;可用security find-internet-password -s github.com -w提取单条,但批量需脚本遍历 - Linux(
store方式):直接备份~/.git-credentials,但注意该文件权限应为600,否则 Git 会拒绝读取 - SSH 密钥:用
ssh-keygen -l -f ~/.ssh/id_rsa校验私钥有效性;公钥(id_rsa.pub)需重新添加到 GitHub/GitLab
路径相关配置(如 core.editor、init.templateDir)迁移后大概率失效
很多配置值是绝对路径,比如 core.editor 指向 /usr/local/bin/code --wait,或 init.templateDir 指向 /Users/alice/git-templates。旧路径在新机器上不存在,Git 会静默忽略或报错。
- 迁移后立即运行
git config --global --edit,人工检查所有含路径的字段 - 常见易错项:
core.editor、diff.tool、merge.tool、init.templateDir、include.path - 推荐用相对路径或跨平台工具名(如
code --wait而非完整路径),并确保对应 CLI 工具已安装且在$PATH中
最麻烦的不是配置文件本身,而是那些没出现在 git config 输出里、却实际影响行为的环境变量(如 GIT_SSH_COMMAND)和 shell 别名。它们不会被任何 Git 命令导出,得靠 env | grep GIT 和 alias | grep git 单独捕获。











