同时使用GitHub和GitLab的Git配置

在实际开发中,我们经常需要同时使用 GitHub 和 GitLab 来管理不同的项目。本文将介绍如何配置 Git 以同时使用这两个平台。

配置SSH密钥

1. 生成多个SSH密钥

为了区分不同的 Git 托管平台,我们需要为每个平台生成独立的 SSH 密钥:

# 为 GitHub 生成密钥
ssh-keygen -t rsa -C "your_email@example.com" -f ~/.ssh/id_rsa_github

# 为 GitLab 生成密钥
ssh-keygen -t rsa -C "your_email@example.com" -f ~/.ssh/id_rsa_gitlab

2. 配置SSH config文件

编辑 ~/.ssh/config 文件,为不同的平台配置不同的 SSH 密钥:

# GitHub配置
Host github.com
    HostName github.com
    User git
    IdentityFile /c/Users/zhang/.ssh/id_ed25519_github
    IdentitiesOnly yes

# GitLab配置
Host self.gitlab
    HostName self.gitlab.com
    Port 6622
    User git
    IdentityFile  /c/Users/zhang/.ssh/id_rsa_gitlab
    IdentitiesOnly yes

3. 添加SSH密钥到平台

将公钥添加到对应的平台:

# 查看GitHub公钥
cat ~/.ssh/id_ed25519_github.pub

# 查看GitLab公钥
cat ~/.ssh/id_rsa_gitlab.pub

GitHub: 将公钥添加到 Settings → SSH and GPG keys → New SSH key

GitLab: 将公钥添加到 Preferences → SSH Keys → Add SSH Key

4. 测试SSH连接

# 测试GitHub连接
ssh -T git@github.com

# 测试GitLab连接
ssh -T git@self.gitlab

配置Git用户信息

全局配置(默认)

# 设置全局用户名和邮箱
git config --global user.name "Your Name"
git config --global user.email "your_email@example.com"

GitLab服务器配置

配置 gitlab_shell_ssh_host

在 GitLab 服务器端配置文件中,可以设置 gitlab_rails['gitlab_shell_ssh_host'] 来指定 SSH 主机名:

# 编辑 GitLab 配置文件(通常在 /etc/gitlab/gitlab.rb)
gitlab_rails['gitlab_shell_ssh_host'] = 'self.gitlab'

这样,在代码clone区域生成的连接为: git@self.gitlab:用户名/项目名.git 配置说明:

  1. 作用:这个配置项用于设置 GitLab Shell 的 SSH 主机名,当用户通过 SSH 克隆或推送代码时,GitLab 会使用这个主机名。

  2. 使用场景

    • 当 GitLab 服务器有多个域名或IP地址时
    • 当需要通过特定的主机名访问 GitLab 时
    • 当需要统一管理 SSH 访问入口时
  3. 配置步骤

# 1. 编辑GitLab配置文件
sudo vim /etc/gitlab/gitlab.rb

# 2. 添加或修改以下配置
gitlab_rails['gitlab_shell_ssh_host'] = 'self.gitlab'

# 3. 重新配置GitLab
sudo gitlab-ctl reconfigure

# 4. 重启GitLab服务(如果需要)
sudo gitlab-ctl restart
  1. 客户端配置

在客户端,需要确保 SSH config 中的 Host 名称与服务器配置一致:

# ~/.ssh/config
Host self.gitlab
    HostName self.gitlab.com  # 实际的服务器IP或域名
    User git
    IdentityFile ~/.ssh/id_ed25519_gitlab
    Port 6622 # 在这里添加实际的ssh端口,在服务器端配置文件内其实不需要设置
    IdentitiesOnly yes
  1. 验证配置
# 测试SSH连接
ssh -T git@self.gitlab

# 如果配置正确,会看到类似输出:
# Welcome to GitLab, @username!

实际使用示例

克隆仓库

# 克隆GitHub仓库
git clone git@github.com:username/repo.git

# 克隆GitLab仓库
git clone git@self.gitlab:username/repo.git

添加远程仓库

# 添加GitHub远程仓库
git remote add github git@github.com:username/repo.git

# 添加GitLab远程仓库
git remote add gitlab git@self.gitlab:username/repo.git

推送到不同的远程仓库

# 推送到GitHub
git push github main

# 推送到GitLab
git push gitlab main

常见问题解决

问题1:SSH连接超时

检查防火墙设置和网络连接:

# 测试端口连通性
telnet github.com 22
telnet gitlab.com 6622

问题2:GitLab配置不生效

确保重新配置了GitLab:

# 重新配置GitLab
sudo gitlab-ctl reconfigure

# 检查配置是否生效
sudo gitlab-rake gitlab:check

问题3:多个SSH密钥冲突

确保在 ~/.ssh/config 中设置了 IdentitiesOnly yes,这样SSH只会使用配置文件中指定的密钥。