首页 > 解决方案 > 多个 git 帐户:不使用 .ssh/config 或 SSH 代理

问题描述

我想使用多个 Git 服务器帐户(与 GitHub、GitLab、BitBubket 等中的任何一个)。

这些帐户通过其电子邮件地址、name1@email1.com 和 name2@email2.org 进行区分,并且 git 设置为在相关存储库中使用这些地址

以下限制适用于“更改帐户工作流程”:

  1. ~/.ssh/config添加/删除/更改存储库或服务器时,无需触摸/更改 SSH 配置文件(例如,等)。
  2. 不需要运行 SSH 代理,即没有ssh-add ...
  3. 在不改变环境变量的情况下。
  4. 在不改变git clone <address>指令的情况下。
  5. 将与 git 一起使用的 SSH 密钥与其他 SSH 密钥隔离开来。
  6. 在所有私有和公共存储库中使用相同的“更改帐户工作流程”。
  7. “更改帐户工作流程”是一 (1) 步/命令。
  8. “更改帐户工作流程”是每个存储库一 (1) 次(即不是每次您进入存储库工作时)。

初始存储库设置(也是一次性活动)可能涉及多个步骤。只要不违反约束,任何约定/假设都是可以接受的。

不相关的问题:

这些是不满足约束条件的响应。
它们通常需要更改~/.ssh/config和/或涉及 SSH 代理守护进程:

  1. 处理多个 git 帐户
  2. 使用多个 git 帐户
  3. 多个 git 帐户和 ssh 密钥
  4. 多个 github 帐户 ssh 配置
  5. 同一台机器上的多个 git 用户
  6. 多个-github-accounts-with-git-in-windows
  7. git-multiple-accounts-and-repository-problems
  8. ssh-config-to-access-multiple-repo-not-working
  9. 同一台计算机上的多个 github 帐户
  10. 可以-i-specify-multiple-users-for-myself-in-gitconfig
  11. 设置-ssh-config-file-for-multiple-codebase-accounts
  12. 如何-我-推送-git-with-multiple-accounts-on-one-machine
  13. 多个-github-accounts-what-values-for-host-in-ssh-config
  14. 如何在您的计算机上配置多个 github 帐户
  15. ssh-config-with-multiple-keys-for-multiple-gitlab-user-accounts
  16. github-multiple-accounts-permission-to-personalusername-reponame-git-denied-to

标签: gitgithubsshgitlab

解决方案


测试和工作:

一步“更改帐户工作流程”:

您在克隆后执行此操作一次- 对于已设置为支持使用多个 git 帐户提交的开发人员的任何存储库。

git config --local --add include.path ../.git-config

现在,无论何时从该存储库提交/推送,您都将使用该存储库的帐户。
当您移入/移出此存储库时,您无需进行任何进一步的更改。

一步设置。

这就是您“设置以支持使用多个 git 帐户提交的开发人员”的方式

  1. 克隆存储库并 Git 提交:
pushd /src/path/to/git/repo
  tee --append .git-config > /dev/null <<'EOF'
  [core]
    sshCommand = ssh -o StrictHostKeyChecking=no -o GlobalKnownHostsFile=/dev/null -o UserKnownHostsFile=/dev/null -o IdentitiesOnly=yes -i ~/.config/git/$(git config --get --local --includes user.email) -F /dev/null
  EOF
popd

假设

  • SSH 密钥文件被命名为<name@email.com>(private) 和<name@email.com>.pub (public)。
  • SSH 密钥文件可以位于 SSH 命令可访问的任何位置。

注意: 不使用多个帐户的用户不受此影响。.git-config他们只是在克隆后不包含 Git片段。顺便说一句:SSH 密钥文件的位置符合XDG 基本目录规范,但您可以将 SSH 密钥放置在最安全的地方,而不必更改 SSH 配置文件。

该问题表明 Git 已设置为使用用于命名 SSH 密钥文件的电子邮件地址进行提交,因此这已经完成,但为了完整性:

git config --local user.email name1@email1.com

推荐阅读