git和github关于账号和写权限的问题 | 没有权限的账号能push到远程库?

本文探讨了git与github在账号识别和权限管理方面的工作原理。内容包括如何判断git账号,commit邮箱地址的影响,以及权限获取和判断的方法。通过测试发现,push权限基于ssh配置,而非git邮箱,即使没有写权限的账号也能push,前提是该电脑的ssh公钥已添加到仓库的授权名单中。

git和github关于账号和写权限的问题

刚开始学习git的时候会遇到这样的疑问,本地git push到远程库,github是怎么识别我的账号和写权限的?

甚至可以做到同一台电脑使用没有写权限的用户push到库中(很离谱是吧)

如何判断账号

查看官网

About commit email addresses

GitHub uses your commit email address to associate commits with your account on GitHub.com. You can choose the email address that will be associated with the commits you push from the command line as well as web-based Git operations you make.

For web-based Git operations, you can set your commit email address on GitHub.com. For commits you push from the command line, you can set your commit email address in Git.

Any commits you made prior to changing your commit email address are still associated with your previous email address.

可知github的账号是和git 设置的邮箱相关的

测试

我准备了三个邮箱,一个远程库(远程库有一个hello.txt),和本地创建三个文件夹,每个账号都会进入到不同的文件夹操作。

在这里插入图片描述

github账号邮箱说明
AaA账号绑定了邮箱a,并且A账号拥有该远程库的写权限
BbB账号绑定了邮箱b,并且B账号拥没有该远程库的写权限
cc邮箱没有绑定任何账号

测试1:首先我在本地git中设置的邮箱是a 进行clone ,然后修改hello.txt提交。成功提交

image-20220512022203396

测试2 :git 中设定邮箱是b。进行clone 修改hello.txt进行push。成功提交,值得注意的是b邮箱绑定的这个账号并不是团队里的成员理论上来说是没有写权限的但也能成功提交。为什么呢????权限测试那会给大家解释清楚。

image-20220512022741398

没有添加过成员

image-20220512023033551

测试3: git 中设置没有注册过Github的邮箱。进行clone 修改hello.txt进行push,成功提交。

image-20220512023901976

并且这个里的提交用户显示的是git上设置的用户名

image-20220512024027126

如何判断权限

权限的获取

我们的库的写权限的

  • 要么是自己是库的所有者(本身就自带权限)。
  • 要么是别人授予的(团队内协作、跨团队协作)。

所以如果你需要写权限请确保以及拥有上面的两种条件。

判断权限

根据上面测试账号发现,我本来没有权限的账号也能push到远程库,就离谱。那什么会发生这种情况呢?真的不需要权限就能push嘛?本地git push到远程库,github是怎么识别我的写权限的?

答案是:需要权限,但不完全需要权限,github根据我配置的ssh来识别权限的。并且只有本台电脑配置过的ssh对应的账号拥有该远程库的权限,使用其他账号提交的时候才不需要权限(其他账号不需要加入进团队也可以)。

我们的账号配置了ssh(公钥),和我们电脑上的私钥是一对的。上传的库的团队成员是配置了我这台电脑的公钥,我们就能成功push,且不管我们使用git的什么邮箱。

测试

准备:两台电脑两个账号。并且远程库的团队成员只有a账号,并且各个账户都绑定了对应电脑的ssh

电脑账号
Aa
Bb

测试不同电脑不同账号的push操作

ab
A成功成功
B不成功不成功

测试1:A电脑的push 参考上面的账号测试,都是在一台电脑上Push的都能成功。

测试2:B电脑的 a 账号Push 失败。(a 账号是有该库的权限的)

image-20220512030351050

测试3:B电脑的b账号push失败。(b账号没有权限)

总结

所以根据官网的描述和测试不难得出,push时的账号是和本地Git设置的邮箱相关的。push的权限是根据ssh的配置有关的。

我们的账号配置了ssh(公钥),和我们电脑上的私钥是一对的。上传的库的团队成员是配置了我这台电脑的公钥,我们就能成功push,且不管我们使用git的什么邮箱。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值