git / ssh config:如何管理多个用户名

时间:2017-05-01 15:43:02

标签: git bitbucket ssh-keys

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

我设置ssh配置文件并将ssh公钥放入我的个人帐户。

workspace(name = "projectA")

一切都很好。

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

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

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

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

问题是如何对ssh / git使用哪个用户名?

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

这里应该使用proUsername。即使我将git的用户设置为proUsername:

,它也不起作用
$myUsername: ssh -T pro-bitbucket 
logged in as myUsername.

1 个答案:

答案 0 :(得分:0)

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

我们的想法是根据git强制.gitconfig命令用作特定的cwd文件。

因此,在父目录中为git文件公开了一个bash .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 link upper

#!/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,并在source ~/.recursive-gitconfig.sh的第一行中添加.bashrc