说明文档里面提到的坑我一个也踩不到;谁也没遇到的坑我处处都掉。
——题记
前几天我发了条QQ空间说说,附的图片是我的GitHub贡献图上出现了一只猫。

你要知道我为了实现它多么难……
遇见Gitfiti
看到有人贡献图做了这个效果,觉得很有意思,于是我去百度搜了一下,就发现了Gitfiti。这是一个Python程序,原理其实也不是很难。运用了git的一个特性,就是Git记录的commit提交时间不是提交到git服务器时服务器的时间,而是提交者的设备的时间。那么,只要篡改发到git服务器的时间,就可以实现在一天内进行看起来不同日期的提交。
现在有个问题。我们家电脑最近重装了Windows系统,C盘里的git和Python都没了,这我该怎么办呢,又不能用手机安装Python或者git。突然我想起,这个网站的服务器,也是一台电脑。不仅如此,它还安装了较新版本的Git和Python 3。于是,我就“打起了服务器的主意”。
开始…
首先让服务器连接上GitHub。这不难。直接ssh keygen一个ssh密钥然后在GitHub的用户设置里面添加公钥就好。(输入法居然提示我,公钥的钥读作yue四声,我读错了这么长时间)
然后,开始安装Gitfiti。
git clone git@github.com:gelstudios/gitfiti.git
cd gitifi
python gitfiti.py
这时,它就提示我输入Github用户名、新建的仓库名、想要显示的提交图案的时间、图案,我进行了一番设置,因为都是手把手的,我就不在这里赘述了。
最后它生成了一个gitfiti.sh,我只需要sh gitfiti.sh然后等待一会儿,便提交上去了。呐:

没什么问题,不是吗?
“没什么问题”
等一下!为什么提交者(图中的粗体字)是“Gitea”?
我想了半天没想出来,觉得无妨,去看看我的GitHub主页,发现没有预想的图案,去看说明文档,才发现需要等一两天,我就没当回事儿。
但是已经一个星期过去了啊啊啊!为什么还没有!
我曾经看过Spencer Woo的一篇文章,有人在GitHub上冒充他。再想想提交者是Gitea,再想想我用的是我的服务器……突然,这些毫无联系的句子仿佛一个个结点,在高速运动中猛然结成了一张网,仿佛我猛然间想出一道几何体的解法一样。
原来——是这样!GitHub是直接存储git提交的git用户名和git设置的邮箱,然后再根据这些信息去和自己数据库中的用户信息匹配,来确认是哪个用户在提交,从而记录提交数量。我在使用时只添加了ssh密钥,(哎呀,又读错了)而服务器上又有一个Gitea程序——我们的GitUP网站。在安装Gitea时可能git用户名和邮箱就被修改了,因此Github并不能认出是我在提交。找到了问题,自然就好解决了。
git config --global user.name "cao-zhiming"
git config --global user.email "my_email@email.cn"
聪明的小伙伴都看出来了,可以运用Git的这一个(也是又一个)特性来伪造他人向Github提交,就像Spencer Woo的那篇文章一样。这也就是为什么我在上面的代码里面没有透露我的真实邮箱。
好吧,总之,又踩了一个别人都从未踩过的坑,但至少搞定了,可以去发个朋友圈或者QQ空间炫耀一下了。(你也可以借助我在上一段说的这个git特性,在知道另一个Github用户的用户名和Github用户邮箱的情况下,在他/她的贡献图上显示一些图案,嘘~别说是我告诉你的😄)
文章评论
额,好像99天以后就要生物地理小中考了😂,(点击来查看中考倒计时)我还是快点去学习吧。
@曹智铭 我们是同一届的
@返回 哦?你是说,我们是同一个年级的?
@返回 幸会幸会。
@返回 貌似是这样的