在我的~/。gitconfig,我列出我的个人电子邮件地址下[用户],因为这是我想用于Github回购。
但是,我最近也开始在工作中使用git。我公司的git回购允许我提交,但是当它发出新的变更集通知时,它说它们来自匿名,因为它不识别我的.gitconfig中的电子邮件地址——至少,这是我的理论。
是否可以在.gitconfig中指定多个[用户]定义?或者是否有其他方法覆盖特定目录的默认.gitconfig ?在我的情况下,我检查了~/worksrc/中的所有工作代码-是否有一种方法只为该目录(及其子目录)指定.gitconfig ?
在看完所有的答案后,这就是我的解决方案:
场景:
本地操作系统: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的风险,因此,错误的身份验证。
我的意见。
让我们重新定义规范-你只是想在git中对不同的组织使用多个身份-你只需要两句话:
# generate a new private public key pair for org1
email=me@org1.eu;ssh-keygen -t rsa -b 4096 -C $email -f $HOME/.ssh/id_rsa.$email
# use org1 auth in THIS shell session - Ctrl + R, type org1 in new one
email=me@org1.eu;export GIT_SSH_COMMAND="ssh -p 22 -i ~/.ssh/id_rsa.$email"
为什么我知道这是迄今为止最简单的解决方案:
# me using 9 different orgs with separate git auths dynamically
find $HOME/.ssh/id_rsa.*@* | wc -l
18
在看完所有的答案后,这就是我的解决方案:
场景:
本地操作系统: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的风险,因此,错误的身份验证。
我的意见。
有点像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,至少在我的目录中不需要更改。