在我的~/。gitconfig,我列出我的个人电子邮件地址下[用户],因为这是我想用于Github回购。

但是,我最近也开始在工作中使用git。我公司的git回购允许我提交,但是当它发出新的变更集通知时,它说它们来自匿名,因为它不识别我的.gitconfig中的电子邮件地址——至少,这是我的理论。

是否可以在.gitconfig中指定多个[用户]定义?或者是否有其他方法覆盖特定目录的默认.gitconfig ?在我的情况下,我检查了~/worksrc/中的所有工作代码-是否有一种方法只为该目录(及其子目录)指定.gitconfig ?


当前回答

也许这是一个简单的黑客,但它是有用的。只需生成如下所示的2个ssh密钥。

Generating public/private rsa key pair.
Enter file in which to save the key (/Users/GowthamSai/.ssh/id_rsa): work
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in damsn.
Your public key has been saved in damsn.pub.
The key fingerprint is:
SHA256:CrsKDJWVVek5GTCqmq8/8RnwvAo1G6UOmQFbzddcoAY GowthamSai@Gowtham-MacBook-Air.local
The key's randomart image is:
+---[RSA 4096]----+
|. .oEo+=o+.      |
|.o o+o.o=        |
|o o o.o. +       |
| =.+ .  =        |
|= *+.   S.       |
|o*.++o .         |
|=.oo.+.          |
| +. +.           |
|.o=+.            |
+----[SHA256]-----+

同样的方法为个人创造一个。因此,您有两个ssh密钥,work和company。复制工作。酒吧,工作,个人。Pub, personal to ~/。ssh /目录。

然后使用以下代码创建一个shell脚本,并将其命名为crev.sh (Company Reverse),并包含以下内容。

cp ~/.ssh/work ~/.ssh/id_rsa
cp ~/.ssh/work.pub ~/.ssh/id_rsa.pub

以同样的方式,用以下内容创建一个名为prew .sh(个人反向)的文件。

cp ~/.ssh/personal ~/.ssh/id_rsa
cp ~/.ssh/personal.pub ~/.ssh/id_rsa.pub

在~ /。Bashrc为这些脚本添加别名如下所示

alias crev="sh ~/.ssh/crev.sh"
alias prev="sh ~/.ssh/prev.sh"
source ~/.bashrc

无论何时你想使用company,只要使用crev,如果你想使用personal,请使用prev:-p。

将这些ssh密钥添加到您的GitHub帐户。请确保之前没有生成id_rsa,因为这些脚本将覆盖id_rsa。如果您已经生成了id_rsa,请将其用于其中一个帐户。将它们复制为个人密钥,跳过生成个人密钥。

其他回答

在阅读了许多答案后,下面是完整的步骤

如何为不同的github帐户设置多个SSH密钥

您可能需要开始检查当前保存的密钥

$ ssh-add -l

如果您决定删除之前的所有缓存键(可选,请注意这一点)

$ ssh-add -D

然后,您可以创建一个ssh pub/priv密钥链接到您希望/需要使用的每个电子邮件/帐户

$ cd ~/.ssh
$ ssh-keygen -t rsa -C "work@company.com" <-- save it as "id_rsa_work"
$ ssh-keygen -t rsa -C "pers@email.com" <-- save it as "id_rsa_pers"

执行这些命令后,您将创建以下文件

~/.ssh/id_rsa_work      
~/.ssh/id_rsa_work.pub

~/.ssh/id_rsa_pers
~/.ssh/id_rsa_pers.pub 

确保身份验证代理程序正在运行

$ eval `ssh-agent -s`

添加生成的键,如下所示(从~/。ssh文件夹)

$ ssh-add id_rsa_work
$ ssh-add id_rsa_pers

现在您可以再次检查保存的密钥

$ ssh-add -l

现在您需要将生成的公钥添加到您的github/ bickbucket服务器访问密钥

克隆每个回购到不同的文件夹

转到用户work将要工作的文件夹并执行此操作

$ git config user.name "Working Hard"
$ git config user.email "work@company.com" 

看看这是怎么做的检查"。git/config"的内容

转到用户pers将工作的文件夹并执行此操作

$ git config user.name "Personal Account"
$ git config user.email "pers@email.com" 

看看这是怎么做的检查"。git/config"的内容

完成这些之后,你就可以通过在这两个文件夹之间切换来提交你的个人代码和工作代码了

如果你正在使用Git Bash并且需要在Windows下生成ssh密钥,请遵循以下步骤:

https://support.automaticsync.com/hc/en-us/articles/202357115-Generating-an-SSH-Key-on-Windows

在看完所有的答案后,这就是我的解决方案:

场景:

本地操作系统:Linux (bash) GitHub上的两个账户(工作/个人) 不同密钥的SSH访问 我的工作帐户将是“主”帐户(因此不需要自定义配置)

配置:

Set a "fake" host, which allows me to select the proper SSH keypair. At ~/.ssh/config: # Personal GitHub account Host github-personal HostName github.com User git IdentityFile ~/.ssh/id_rsa_personal IdentitiesOnly yes "Tell" git it should use a custom configuration within a given directory subtree: At ~/.gitconfig: # My personal projects [includeIf "gitdir/i:~/REPOS/PERSONAL/"] path = ~/REPOS/PERSONAL/personal.gitconfig Finally, my config at ~/REPOS/PERSONAL/personal.gitconfig: # gitconfig for personal projects [user] email = personalemail@example.com [url "git@github-personal"] insteadOf = git@github.com

一旦上述三个到位,我可以克隆一个个人回购像这样:

user@host:~/REPOS/PERSONAL$ git clone git@github.com:jmnavarrol/python-multigit.git
Cloning in 'python-multigit'...
(...)
user@host:~/REPOS/PERSONAL$ cd python-multigit && git remote -v
origin  git@github-personal:jmnavarrol/python-multigit.git (fetch)
origin  git@github-personal:jmnavarrol/python-multigit.git (push)
user@host:~/REPOS/PERSONAL/python-multigit$

在~/REPOS/PERSONAL/ PERSONAL .gitconfig添加了url重写…

[url "git@github-personal"]
  insteadOf = git@github.com

...是什么允许我仅通过脚本中的“标准”URL引用repo, subrepos(即python-multigit本身的情况-是的,蹩脚的自我推销尝试),而不用冒使用“错误”URL的风险,因此,错误的身份验证。

我的意见。

我做了一个bash函数来处理这个。这是Github回购。

备案:

# 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'

有点像Rob W的答案,但允许不同的ssh密钥,并适用于旧版本的git(没有例如核心)。sshCommand配置)。

我创建了~/bin/git_poweruser文件,具有可执行权限,并在PATH中:

#!/bin/bash

TMPDIR=$(mktemp -d)
trap 'rm -rf "$TMPDIR"' EXIT

cat > $TMPDIR/ssh << 'EOF'
#!/bin/bash
ssh -i $HOME/.ssh/poweruserprivatekey $@
EOF

chmod +x $TMPDIR/ssh
export GIT_SSH=$TMPDIR/ssh

git -c user.name="Power User name" -c user.email="power@user.email" $@

每当我想以“超级用户”的身份提交或推送一些东西时,我使用git_poweruser而不是git。它可以在任何目录下工作,并且不需要更改.gitconfig或.ssh/config,至少在我的目录中不需要更改。

也许这是一个简单的黑客,但它是有用的。只需生成如下所示的2个ssh密钥。

Generating public/private rsa key pair.
Enter file in which to save the key (/Users/GowthamSai/.ssh/id_rsa): work
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in damsn.
Your public key has been saved in damsn.pub.
The key fingerprint is:
SHA256:CrsKDJWVVek5GTCqmq8/8RnwvAo1G6UOmQFbzddcoAY GowthamSai@Gowtham-MacBook-Air.local
The key's randomart image is:
+---[RSA 4096]----+
|. .oEo+=o+.      |
|.o o+o.o=        |
|o o o.o. +       |
| =.+ .  =        |
|= *+.   S.       |
|o*.++o .         |
|=.oo.+.          |
| +. +.           |
|.o=+.            |
+----[SHA256]-----+

同样的方法为个人创造一个。因此,您有两个ssh密钥,work和company。复制工作。酒吧,工作,个人。Pub, personal to ~/。ssh /目录。

然后使用以下代码创建一个shell脚本,并将其命名为crev.sh (Company Reverse),并包含以下内容。

cp ~/.ssh/work ~/.ssh/id_rsa
cp ~/.ssh/work.pub ~/.ssh/id_rsa.pub

以同样的方式,用以下内容创建一个名为prew .sh(个人反向)的文件。

cp ~/.ssh/personal ~/.ssh/id_rsa
cp ~/.ssh/personal.pub ~/.ssh/id_rsa.pub

在~ /。Bashrc为这些脚本添加别名如下所示

alias crev="sh ~/.ssh/crev.sh"
alias prev="sh ~/.ssh/prev.sh"
source ~/.bashrc

无论何时你想使用company,只要使用crev,如果你想使用personal,请使用prev:-p。

将这些ssh密钥添加到您的GitHub帐户。请确保之前没有生成id_rsa,因为这些脚本将覆盖id_rsa。如果您已经生成了id_rsa,请将其用于其中一个帐户。将它们复制为个人密钥,跳过生成个人密钥。