Git使用技巧——不同的Git仓库使用不同的提交人

Posted by 江湖迈杰的博客 on September 2, 2023

背景

在日常开发中,我们可能会从事多个项目的开发工作,一些在Gitlab上,一些在GitHub,或者公司私有的git服务。在不同git服务,你的用户、email以及ssh的配置可能存在差别,本文将介绍如何进行相关的配置。

操作方法

操作步骤主要包括两步:1)配置git提交的相关信息(提交人);2)配置git相关的ssh

步骤一. 配置git提交的相关信息

方法1:基于git config 命令行的方法

一种常见的配置方法是通过命令行git config来解析配置;

设置提交用户名:git config user.name example 设置提交邮箱:git config user.email user@example.org

默认为本地模式(仅在当前目录下生效),添加–global后,可以在全局生效

这种方法适合对部分仓库进行的特殊操作,需要用户在项目clone 进行手动操作。

方法2:基于.gitconfig 文件的方法

另一种方法为基于文件.gitconfig的配置,可以支持host维度的用户配置,全局自动生效。

git 默认会从本地文件.gitconfig加载配置信息。在该文件中,使用includeIf配置可以选择性加载相关配置,可以进行配置的定向修改,对应的文档地址如下:https://git-scm.com/docs/git-config#_conditional_includes

具体支持基于git远程地址(hasconfig:remote.*.url)、本地git地址(gitdir)、分支(onbranch)等维度进行git config的信息修改。

例如,使用如下配置,对于远程地址为https://github.com/work_org开头的仓库,gitconfig_work这个文件的配置会生效。

[includeIf "hasconfig:remote.*.url:https://github.com/work_org/**"]
  path = .gitconfig_work

如果需要支持不同的Git仓库使用不同的提交人,只需要添加的不同配置即可

例如需要支持github和gitlab使用不同提交人,配置如下:

用户目录下的.gitconfig文件:

# 支持github的https协议
[includeIf "hasconfig:remote.*.url:https://github.com/**"]
  path = .git-config/github-config

# 支持github的ssh协议
[includeIf "hasconfig:remote.*.url:git@github.com:**/**"]
  path = .git-config/github-config

# 支持gitlab的https协议
[includeIf "hasconfig:remote.*.url:https://gitlab.com/**"]
  path = .git-config/gitlab-config

# 支持gitlab的ssh协议
[includeIf "hasconfig:remote.*.url:git@gitlab.com:**/**"]
  path = .git-config/gitlab-config

用户目录下的.git-config/github-config文件:

[user]
  name = Mi&Jack(GitHub)
  email = mijackstudio@gmail.com

用户目录下的.git-config/gitlab-config文件:

[user]
  name = Mi&Jack(GitLab)
  email = mijackstudio@gmail.com

步骤二. 配置git相关的ssh

在文件夹~/.ssh的新加config文件,可以添加如下信息,即可为对应的仓库添加用户信息。

Host mijack-GitHub
HostName github.com
User Mi&Jack
PreferredAuthentications publickey
IdentityFile ~/.ssh/mijack-GitHub 
AddKeysToAgent yes

各字段含义如下:

  • Host:用来定义特定主机的配置信息的。它指定了一个主机的别名和相关的SSH连接参数。
  • HostName:指定远程主机名。
  • Port:指定远程主机端口号,默认为 22 。
  • User:指定登录用户名。
  • IdentityFile:指定密钥认证使用的私钥文件路径
  • AddKeysToAgent字段是用于配置SSH密钥管理的选项。它的作用是决定在首次连接时是否将密钥添加到SSH代理中。