git提交到github总是要输入密码_GitHub不为人知的秘密

270e3067333c12e54b28b6bd0107c16d.png
本来想叫《GitHub骚操作》的,发现相关的文章已经有很多,而且和我本章要讲的内容完全不同,所以就换了这个也算贴切的标题。

起因

之前写过一篇文章《VM Manager 插件分享》,事后我发现有个地方不对劲!看之前文章标题大家应该都能猜到,这是一篇分享我自己开发的插件的文章,内容比较简单,没有什么问题,问题是出在这个项目上。

我自己有两个 GitHub 账号,一个用于个人学习和测试(hzh-test),另一个用来做分享(hzh-cocong)。

在以前,我本地用的一直都是 hzh-test 这个账号。VM Manager 这个插件是放在 hzh-cocong 上的,我在一开始开发的时候直接用 HTTPS 地址克隆项目(git clone https://github.com/hzh-cocong/VM-Manager.git),结果如大家所料,代码无法 push 到 GitHub 仓库,因为 push 用的是 hzh-test 身份,而这个项目是属于 hzh-cocong 所有的。于是我设置了本地项目的 user.name 和 user.email,发现还是无法提交,搞了很久都没成功,最后无奈改成 SSH 方式才提交成功。(以前是弄过 SSH 的,只是没完全懂,又觉得麻烦,所以习惯用 HTTPS 的方式)

就这样,项目愉快地上线了,文章也发出去了。虽然没什么人看,但毕竟是自己发布的第二篇文章,所以我还是很关注的,没事我就会去看看有没有人 start 或者 fork。很遗憾,一个人也没有 。

在这个过程中,我偶然发现一个问题,请看下图。

026eefb6dbe0ae7f252fe09edaef4de2.png

这个项目我不是用的 hzh-cocong 的身份创建和开发的吗?怎么多了个 hzh-test,而且除了最开始的提交,后面的提交都是 hzh-test。真是逆天了!还能不能愉快地玩耍了!

5a830622bcd1bf9b8da60bf1ec88829d.png

一番研究后,我发现了 GitHub 不为人知的秘密!

缘由

相信不少人第一次用 GitHub 都是去网上搜索教程,而网上的教程第一步大都要我们先设置 user.name 和 user.email 这两个全局变量。于是,自然而然地我们会把这些变量和我们的 GitHub 身份联系在一起。我这个本地 VM Manager 项目默认用的也是全局配置(虽然前面说到我做了修改,不过后面又改回来了),所以在 Git 的历史提交记录中,其记录的是 hzh-test,而在项目提交时所做的密码验证或者 SSH 配置其实只是在确认用户身份(hzh-cocong),和 user.name 和 user.email 没有任何关系。前面说到我修改了 user.name 和 user.email 仍然无法提交就是这个原因。(HTTPS 方式克隆的第一次提交是要输入用户名和密码的,这里也可以看出其是和项目配置无关的,不然怎么还要输入用户名,直接输密码不就行了。)

其实,如果是使用 HTTPS 克隆项目的话,在第一次使用 GitHub 并在提交时输入 GitHub 的用户名和密码后,Git 就会把密码保存在本地钥匙串中(这里说的是 Mac,Windows 好久没用了,应该也是一样的),之后的每一次提交都是直接从钥匙串中获取,不需要重新输入密码。

d79af803b37dd693f8c291d6f954dd5c.png

所以我之前切换 GitHub 身份不一定非要使用 SSH,直接修改钥匙串中的用户名和密码,或者删除钥匙串内容(下次提交会重新提示输入用户名和密码),就可以切换身份了。

秘密

问题终于水落石出了,这是由于 GitHub 上的提交记录显示的是我们配置的 user.email 对应的用户,而非真实提交的用户。那这样的话,如果我把本地的 user.name 和 user.email 修改成别人的,岂不是能够伪造出一个“人人为项目做贡献”的假象?答案是“是的”。

不过这里有个前提,你得知道别人的邮箱是什么。网上搜索了一下,很轻松地就找到了方法。这里有详细的教程,有兴趣大家可以去看一下,在 GitHub 公开仓库中隐藏自己的私人邮箱地址,这里我简单说明一下。

随便寻找一个 GitHub 项目,查看最近的提交记录,点击查看更改的内容,如:https://github.com/hzh-test/test/commit/1b8650e55e1a0eb7b1c3c004144587178945593f

84324394f0fa4e799fa1cab678ba5902.png

在地址末位加上 .patch,如:https://github.com/hzh-test/test/commit/1b8650e55e1a0eb7b1c3c004144587178945593f.patch

bd18a3d1d17cf70a728a7445ccfb1a0b.png

这样,我们就拿到了别人的邮箱(这个是可以屏蔽的,个人觉得没必要,网上大多也都没有屏蔽)。有了邮箱就好办了,我们直接用以下命令设置项目。

$ git config --local user.name "walterlv"
$ git config --local user.email "xxxxxx@qq.com"

接下来所有的提交就都是用的我们设置的本地用户名和邮箱,于是就有了下面这张图。(我和 walterlv 完全不认识)

7ef9a072f85feb17defb1af5c4bd919a.png

虽然我们自己操作的项目可以伪造贡献者信息,但是对于被伪造的用户是没有任何影响的,其个人主页并不会说在最近有参与别人的项目。GitLab 我试了一下,在 Git Log 中是有作用的,不过它在网页上用的是真实提交的用户,所以不会有 GitHub 这个问题。

思考

到这里,秘密不再是秘密。细细想来,其实这也只能是自娱自乐罢了,不过我觉得还是挺有意思的。严格来说,这不是 GitHub 的问题,因为这是 Git 本身拥有的功能,所以不应该算是一个问题,但总是让人觉得有点别扭,不知道大家怎么看?

参考链接

在 GitHub 公开仓库中隐藏自己的私人邮箱地址,吕毅

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值