git - 多个 git 帐户:不使用 .ssh/config 或 SSH 代理
问题描述
我想使用多个 Git 服务器帐户(与 GitHub、GitLab、BitBubket 等中的任何一个)。
这些帐户通过其电子邮件地址、name1@email1.com 和 name2@email2.org 进行区分,并且 git 设置为在相关存储库中使用这些地址
以下限制适用于“更改帐户工作流程”:
~/.ssh/config
添加/删除/更改存储库或服务器时,无需触摸/更改 SSH 配置文件(例如,等)。- 不需要运行 SSH 代理,即没有
ssh-add ...
。 - 在不改变环境变量的情况下。
- 在不改变
git clone <address>
指令的情况下。 - 将与 git 一起使用的 SSH 密钥与其他 SSH 密钥隔离开来。
- 在所有私有和公共存储库中使用相同的“更改帐户工作流程”。
- “更改帐户工作流程”是一 (1) 步/命令。
- “更改帐户工作流程”是每个存储库一 (1) 次(即不是每次您进入存储库工作时)。
初始存储库设置(也是一次性活动)可能涉及多个步骤。只要不违反约束,任何约定/假设都是可以接受的。
不相关的问题:
这些是不满足约束条件的响应。
它们通常需要更改~/.ssh/config
和/或涉及 SSH 代理守护进程:
- 处理多个 git 帐户
- 使用多个 git 帐户
- 多个 git 帐户和 ssh 密钥
- 多个 github 帐户 ssh 配置
- 同一台机器上的多个 git 用户
- 多个-github-accounts-with-git-in-windows
- git-multiple-accounts-and-repository-problems
- ssh-config-to-access-multiple-repo-not-working
- 同一台计算机上的多个 github 帐户
- 可以-i-specify-multiple-users-for-myself-in-gitconfig
- 设置-ssh-config-file-for-multiple-codebase-accounts
- 如何-我-推送-git-with-multiple-accounts-on-one-machine
- 多个-github-accounts-what-values-for-host-in-ssh-config
- 如何在您的计算机上配置多个 github 帐户
- ssh-config-with-multiple-keys-for-multiple-gitlab-user-accounts
- github-multiple-accounts-permission-to-personalusername-reponame-git-denied-to
解决方案
测试和工作:
一步“更改帐户工作流程”:
您在克隆后执行此操作一次- 对于已设置为支持使用多个 git 帐户提交的开发人员的任何存储库。
git config --local --add include.path ../.git-config
现在,无论何时从该存储库提交/推送,您都将使用该存储库的帐户。
当您移入/移出此存储库时,您无需进行任何进一步的更改。
一步设置。
这就是您“设置以支持使用多个 git 帐户提交的开发人员”的方式:
- 克隆存储库并 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
推荐阅读
- python - Python 诗歌在 Ubuntu 上失败
- python - 已经安装了 python 的 anaconda 安装
- node.js - 使用 swagger-ui-express 时优化 express 中的中间件
- c# - 交叉应用 LINQ-TO-SQL
- graphql - 添加 graphql 解析器时,Flyway 迁移停止工作
- typescript - 如何使用 AWS CDK 检查自定义 VPC 是否已存在?
- c - c中链表中的原子和一致性(ACID)插入
- mysql - 如何在 WHERE 中使用 AS 和别名?
- python - 单击不是 SELECT 元素的下拉菜单的第一个元素-Python selenium
- python - 更改用户密码和用户名后用户未保持登录状态