【问题标题】:git/ssh config: how to manage multiple usernamesgit/ssh config:如何管理多个用户名
【发布时间】:2017-09-29 00:47:47
【问题描述】:

我有 2 个 bitbucket 帐户:一个是个人帐户,一个是我工作的公司拥有的帐户。

我设置了 ssh 配置文件并将 ssh 公钥用于我的个人帐户。

Host perso-bitbucket
  User git
  Hostname bitbucket.org
  IdentityFile ~/.ssh/perso-key

一切正常。

$myUsername: ssh -T perso-bitbucket 
logged in as myUsername.

现在,我添加第二个 ssh-key:

Host pro-bitbucket
  User git
  Hostname bitbucket.org
  IdentityFile ~/.ssh/pro-key

并将公钥添加到我的 bitbucket 帐户 proUsername。

问题是我如何告诉 ssh/git 使用哪个用户名?

$myUsername: ssh -T pro-bitbucket 
logged in as myUsername.

在这里,它应该使用 proUsername。即使我将 git 的用户设置为 proUsername 也不起作用:

git config --global user.name proUsername

【问题讨论】:

  • 我是否正确假设您希望使用您的个人密钥访问您的个人 bitbucket 帐户并使用不同的密钥访问您公司的 bitbucket 帐户?如果是,那么我写的类似问题的答案可能会对您有所帮助stackoverflow.com/a/43692897/2928051
  • 使用git config --global user.name username 设置git 用户名仅指定将添加到git 提交对象的名称。这可能与您的 bitbucket 用户名不同。当您使用 ssh -T perso-bitbucket 测试您的 ssh 连接时,ssh 会隐式使用您的 ssh 配置中定义的用户名 git。如果密钥有效,bitbucket 将使用密钥映射到的 bitbucket 用户名进行响应。

标签: git bitbucket ssh-keys


【解决方案1】:

我遇到了同样的问题,最后写了一个 bash 脚本来处理它。你可以在这里找到它recursive-gitconfig

这个想法是强制 git 命令用作特定的 .gitconfig 文件,具体取决于 cwd

因此公开了一个 bash git 函数在父目录中寻找 .gitconfig 文件,并使用第一个匹配作为 git 配置文件。


这是我的使用方法:

文件~/.gitconfig:

[user]
    email = arnout@spam.bacon
    name = Arount
[core]
    editor = vim
[alias]
    lol = log --graph --decorate --pretty=oneline --abbrev-commit
    lola = log --graph --decorate --pretty=oneline --abbrev-commit --all
    ...

这是我的全局配置,我是Arount,我设置了编辑器和别名。

文件~/Work/.gitconfig:

[include]
    path = /home/me/.gitconfig

[user]
    email = the-coporate-me@my-super-company.lol
    name  = My Real Me

所以在我使用git 的任何地方,我都是 Arount,但在 ~/Work/ 中,我是公司的我。您可以制作多个层(Work/compagny1Work/campgny2)、递归等..

您可以更新和覆盖每个 gitconfig 配置键。


这里是代码,但我建议使用github链接上层

#!/bin/bash
# Look for closest .gitconfig file in parent directories
# This file will be used as main .gitconfig file.
function __recursive_gitconfig_git {
    gitconfig_file=$(__recursive_gitconfig_closest)
    if [ "$gitconfig_file" != '' ]; then
        home="$(dirname $gitconfig_file)/"
        HOME=$home /usr/bin/git "$@"
    else
        /usr/bin/git "$@"
    fi
}

# Look for closest .gitconfig file in parents directories
function __recursive_gitconfig_closest {
    slashes=${PWD//[^\/]/}
    directory="$PWD"
    for (( n=${#slashes}; n>0; --n ))
    do
        test -e "$directory/.gitconfig" && echo "$directory/.gitconfig" && return 
        directory="$directory/.."
    done
}


alias git='__recursive_gitconfig_git'

我建议将此文件复制到 ~/.recursive-gitconfig.sh 之类的文件中,并在 .bashrc 的第一行中添加 source ~/.recursive-gitconfig.sh

【讨论】:

    猜你喜欢
    • 2020-04-09
    • 2022-06-10
    • 2023-02-05
    • 1970-01-01
    • 2022-01-15
    • 1970-01-01
    • 2017-03-21
    • 2014-07-08
    • 2014-11-01
    相关资源
    最近更新 更多