\title{Git 配置管理}
\author{杨岢瑞}
\date{May 18, 2026}
\maketitle
Git 作为现代软件开发的版本控制基石，其配置系统直接决定了提交信息的准确性、操作行为的规范性以及团队协作的效率。合理地管理 Git 配置可以避免身份切换带来的混乱、减少跨项目配置冲突带来的摩擦，同时保障安全与合规要求。常见的场景包括在个人项目与公司项目之间切换身份、为不同团队制定提交规范、以及在多个仓库中保持配置一致性。本文将帮助读者建立三层配置思维，掌握从全局到项目级别的精细管控方法，并提供可落地的命令与最佳实践。\par
\chapter{Git 配置的基本概念}
Git 的配置分为三层，优先级从高到低依次为本地配置、全局配置和系统配置。本地配置存储于当前仓库的 \texttt{.git/config} 文件中，只对该项目生效；全局配置存储于用户主目录下的 \texttt{\~{}/.gitconfig} 文件中，适用于当前用户的所有仓库；系统配置则位于 \texttt{/etc/gitconfig}，通常由系统管理员维护，影响所有用户。通过命令 \texttt{git config --list --show-origin} 可以同时查看配置项及其来源文件，方便快速诊断当前生效的配置。当需要查询特定配置项的来源时，可以使用 \texttt{git config --get-all <key> --show-origin} 来列出该配置在不同层级的定义。\par
\chapter{核心配置项详解}
用户身份配置是 Git 日常操作必不可少的设置。\texttt{user.name} 与 \texttt{user.email} 分别记录提交者的姓名与电子邮件地址，这些信息会直接写入每一次提交记录中。如果使用 GPG 或 SSH 签名提交，还需要额外配置 \texttt{user.signingkey} 来指定签名密钥。核心行为配置则影响文本换行、编辑器选择与忽略文件规则，例如 \texttt{core.editor} 设置默认文本编辑器，\texttt{core.autocrlf} 控制换行符转换策略，\texttt{core.excludesfile} 指定全局忽略文件路径。安全与签名配置主要用于增强提交与标签的完整性，包括 \texttt{commit.gpgsign}、\texttt{tag.gpsign}、\texttt{gpg.format} 与 \texttt{user.signingkey} 的组合使用。网络与推送行为配置决定默认推送策略与拉取方式，常见选项有 \texttt{push.default}、\texttt{push.autoSetupRemote}、\texttt{pull.rebase} 与 \texttt{fetch.prune}。分支与合并策略配置则用于设定默认分支名称、快进合并行为与分支跟踪关系，典型配置包括 \texttt{init.defaultBranch}、\texttt{merge.ff}、\texttt{pull.ff} 与 \texttt{branch.autoSetupMerge}。颜色与显示优化配置可以提升命令行体验，通过 \texttt{color.ui}、\texttt{color.branch}、\texttt{color.status}、\texttt{color.diff} 等选项让 Git 输出更易于辨识。别名配置通过定义简洁的短命令来加速日常操作，常用别名有 \texttt{co}、\texttt{br}、\texttt{ci}、\texttt{st}、\texttt{lg}、\texttt{unstage} 与 \texttt{last}。\par
\chapter{多身份管理策略}
在实际开发中，私人仓库与公司仓库往往需要不同的提交身份，\texttt{user.name} 与 \texttt{user.email} 必须随项目环境变化而切换。解决这一问题的最佳方式是使用条件包含配置。在全局配置文件中加入以下代码段即可实现目录级自动切换：\par
\begin{lstlisting}
[includeIf "gitdir:~/work/"]
    path = ~/.gitconfig-work
\end{lstlisting}
这段配置的解读是，当当前仓库路径匹配 \texttt{\~{}/work/} 前缀时，Git 将自动加载 \texttt{\~{}/.gitconfig-work} 中的额外配置，从而实现工作身份与个人身份的隔离。另一种推荐做法是严格区分目录结构，在 \texttt{\~{}/work/} 与 \texttt{\~{}/personal/} 两个目录下分别克隆仓库，然后在每个仓库内部使用本地配置覆盖身份信息。脚本或钩子方式作为备选方案，可以在进入目录时自动执行配置切换脚本，但维护成本较高。个人与工作两种身份的推荐配置示例分别如下：\par
\begin{lstlisting}
[user]
    name = 张三
    email = zhangsan@example.com
\end{lstlisting}
\begin{lstlisting}
[user]
    name = 张三
    email = zhangsan@company.com
\end{lstlisting}
\chapter{项目级配置与模板}
创建项目级配置模板可以保证新仓库从一开始就遵循团队规范。通过命令 \texttt{git config --global init.templateDir} 设置模板目录后，Git 在初始化新仓库时会自动复制模板中的配置文件。项目级必须设置的配置包括强制身份信息、提交模板以及自定义钩子路径。\texttt{commit.template} 指向一个包含提交模板的文本文件，可以在每次提交时提示开发者填写规范格式。\texttt{core.hooksPath} 则允许将钩子脚本集中管理，避免将敏感脚本提交到仓库中。\par
