在论文评审或开源贡献场景中,一个常见需求是在同一台机器上配置两个不同的 Git 身份:

  • 实名身份:用于日常工作,比如绑定我们的个人 GitHub 账号;

  • 匿名身份:用于论文相关的代码提交,避免暴露个人信息。

实际上,Git可以进行多个层次的配置:

  • 系统级:git config --system,作用范围是电脑上的所有用户,优先级最低。

  • 用户级:git config --global,作用范围是当前用户的所有仓库,优先级中。

  • 仓库级git config --local,作为范围是当前仓库,优先级最高。

在配置两个身份时,推荐使用“全局实名 + 局部匿名”的策略,即保持全局配置是平时用的实名账号,然后在论文匿名代码仓库中单独覆盖匿名的账号。例如:

# 全局实名配置
git config --global user.name "Ajax Zhan"
git config --global user.email "ajax@example.com"
# 匿名项目
git config user.name "anonymous-contributor"
git config user.email "anon@example.com"

# 验证配置
git config user.name
git config user.email
         

我们需要把代码推送到远程仓库中,所以一般来说会为不同身份使用不同的SSH KEY,对应不同的Github账号。

为了实现这个需求,可以为匿名身份生成单独的SSH KEY,然后~/.ssh/config中进行配置。

# 默认实名账号
Host github.com
  HostName github.com
  User git
  IdentityFile ~/.ssh/id_ed25519

# 匿名账号
Host github-anon
  HostName github.com
  User git
  IdentityFile ~/.ssh/id_ed25519_anon

此时在匿名项目中可以这样设置远程地址:

git remote set-url origin git@github-anon:anonymous-org/anon-repo.git