我有2个github用户帐户(私人和工作),分别称为Allison和Bob。
我有一个bash脚本,叫做:allison_git,它可以:
ssh-add -D
eval $(ssh-agent -s)
git config --global credential.helper wincred
git config --global credential.useHttpPath true
git config --global user.name Allison
git config --global user.email allison@gmail.com
ssh-add ~/.ssh/allison_git_rsa
ssh -T git@github.com
如果艾莉森一切顺利,我会:嗨,艾莉森!您已成功通过身份验证,但GitHub不提供shell访问
所以我可以用我的脚本在用户之间切换。太棒了
然而…假设用户Bob是我的工作用户,Allison是我的私人用户,我正在处理我的工作报告,但忘了切换到Bob我的承诺将作为用户Allison而不是Bob应用
我不知道为什么(我猜是因为他们在同一台电脑上?!)Q: 如何限制用户Allison使用Bobs回购和反向?我用bashallison_git/bob_git处理这一切的方法是否导致了这一切?
注意:我在bob的github帐户(settings-->SSH and PGP Keys)
上添加了bob的pub密钥(bob_git_rsa),对于allison(allison_git_rasa)也是如此。钥匙不同
2条答案
按热度按时间bcs8qyzn1#
您可以使用条件gitconfig指令作为done here:
.gitconfig.work
中的用户名/电子邮件将是Bob的,而~/.work
之外的任何其他存储库的默认名称/电子邮件将为Alice。请注意,
git config --global credential.helper wincred
仅适用于HTTPS URL,如果使用SSH进行身份验证,则不使用。nafvub8i2#
有很多方法可以解决这个问题。例如,除了VonC's answer之外,您可以在笔记本电脑上设置两个不同的登录帐户,但无论您选择什么路径,请记住以下项目:
**Git不进行任何权限检查。Git依赖于其他一些软件来执行任何所需的权限检查。Git只是试着做你要求的任何事情,要么电脑允许,要么不允许。
**Git不会向另一台计算机验证您的身份:这是一种权限和访问类型。Git在使用
https://
URL时确实内置了对credential helpers的支持,并且在使用mn1o1p URLs时内置了对调用ssh的支持(以及时髦的user@host:path/to/repo.git
缩写,它是ssh://user@host/path/to/repo.git
的缩写)。但这只是为了让Git能够运行其他允许身份验证的外部程序。这又回到了上面的第一点。user.name
和user.email
设置是几乎任意的字符串(尽管你必须在这里使用有效的文本,例如不能在用户名中放尖括号),Git只是将它们塞进新的提交中,而没有真正查看它们。它们纯粹是为了获取信息。这又回到了上面的第一点。要使用不同的ssh配置,我认识的大多数人都使用ssh的“主机别名”技巧。这与VonC的回答中提到的条件include技巧配合得很好,特别是当您将其与Git的
url.<replacement>.insteadOf
配置技巧结合时。