在同一台机器上的git用户之间切换(有效),但为什么两者都可以访问另一台机器的存储库?

uinbv5nw  于 2022-10-23  发布在  Git
关注(0)|答案(2)|浏览(203)

我有2个github用户帐户(私人和工作),分别称为AllisonBob
我有一个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)也是如此。钥匙不同

bcs8qyzn

bcs8qyzn1#

您可以使用条件gitconfig指令作为done here


# All work Git repositories are in a subdirectory of ~/work.

# All other Git repositories are outside ~/work.

[includeIf "gitdir:~/work/"]
    path = .gitconfig.work

.gitconfig.work中的用户名/电子邮件将是Bob的,而~/.work之外的任何其他存储库的默认名称/电子邮件将为Alice。
请注意,git config --global credential.helper wincred仅适用于HTTPS URL,如果使用SSH进行身份验证,则不使用。

nafvub8i

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.nameuser.email设置是几乎任意的字符串(尽管你必须在这里使用有效的文本,例如不能在用户名中放尖括号),Git只是将它们塞进新的提交中,而没有真正查看它们。它们纯粹是为了获取信息。这又回到了上面的第一点。

要使用不同的ssh配置,我认识的大多数人都使用ssh的“主机别名”技巧。这与VonC的回答中提到的条件include技巧配合得很好,特别是当您将其与Git的url.<replacement>.insteadOf配置技巧结合时。

相关问题