刚开始学习git的时候会遇到这样的疑问,本地git push到远程库,github是怎么识别我的账号和写权限的?
甚至可以做到同一台电脑使用没有写权限的用户push到库中(很离谱是吧)
如何判断账号查看官网
About commit email addressesGitHub 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账号 | 邮箱 | 说明 |
|---|---|---|
| A | a | A账号绑定了邮箱a,并且A账号拥有该远程库的写权限 |
| B | b | B账号绑定了邮箱b,并且B账号拥没有该远程库的写权限 |
| 无 | c | c邮箱没有绑定任何账号 |
测试1:首先我在本地git中设置的邮箱是a 进行clone ,然后修改hello.txt提交。成功提交
测试2 :git 中设定邮箱是b。进行clone 修改hello.txt进行push。成功提交,值得注意的是b邮箱绑定的这个账号并不是团队里的成员理论上来说是没有写权限的但也能成功提交。为什么呢????权限测试那会给大家解释清楚。
没有添加过成员
测试3: git 中设置没有注册过Github的邮箱。进行clone 修改hello.txt进行push,成功提交。
并且这个里的提交用户显示的是git上设置的用户名
如何判断权限 权限的获取我们的库的写权限的
- 要么是自己是库的所有者(本身就自带权限)。
- 要么是别人授予的(团队内协作、跨团队协作)。
所以如果你需要写权限请确保以及拥有上面的两种条件。
判断权限根据上面测试账号发现,我本来没有权限的账号也能push到远程库,就离谱。那什么会发生这种情况呢?真的不需要权限就能push嘛?本地git push到远程库,github是怎么识别我的写权限的?
答案是:需要权限,但不完全需要权限,github根据我配置的ssh来识别权限的。并且只有本台电脑配置过的ssh对应的账号拥有该远程库的权限,使用其他账号提交的时候才不需要权限(其他账号不需要加入进团队也可以)。
我们的账号配置了ssh(公钥),和我们电脑上的私钥是一对的。上传的库的团队成员是配置了我这台电脑的公钥,我们就能成功push,且不管我们使用git的什么邮箱。
测试准备:两台电脑两个账号。并且远程库的团队成员只有a账号,并且各个账户都绑定了对应电脑的ssh
| 电脑 | 账号 |
|---|---|
| A | a |
| B | b |
测试不同电脑不同账号的push操作
| a | b | |
|---|---|---|
| A | 成功 | 成功 |
| B | 不成功 | 不成功 |
测试1:A电脑的push 参考上面的账号测试,都是在一台电脑上Push的都能成功。
测试2:B电脑的 a 账号Push 失败。(a 账号是有该库的权限的)
测试3:B电脑的b账号push失败。(b账号没有权限)
总结所以根据官网的描述和测试不难得出,push时的账号是和本地Git设置的邮箱相关的。push的权限是根据ssh的配置有关的。
我们的账号配置了ssh(公钥),和我们电脑上的私钥是一对的。上传的库的团队成员是配置了我这台电脑的公钥,我们就能成功push,且不管我们使用git的什么邮箱。



