工作勞累剪决?身體發(fā)虛揭措?沒時(shí)間提交代碼胆数?看著自己的Github主頁中 0 contributions in the last year 是不是很喪氣市埋?不用擔(dān)心黎泣,現(xiàn)在你不僅可以補(bǔ)上你那些空缺的時(shí)光,還可以在上面創(chuàng)建屬于自己獨(dú)一無二的像素涂鴉作品腰素,畫個(gè)愛心對(duì)TA表白聘裁,涂個(gè)蛋糕紀(jì)念生日,盡情發(fā)揮你的創(chuàng)造力弓千。
各位Gayhub,噢不洋访,Github的朋友們镣陕,應(yīng)該都知道Github在個(gè)人主頁有一個(gè)貢獻(xiàn)板塊吧,它通過不同的顏色來展現(xiàn)你在特定時(shí)間段內(nèi)提交次數(shù)的多少姻政,顏色越深代表你那天commit的次數(shù)越多呆抑,奈何我等菜雞屬性,總覺著自己的貢獻(xiàn)面板和大佬之間存在著天壤之別汁展。
別人家的Github:
我的Github:
看著別人綠油油的一片鹊碍,再看看自己 0 contributions in the last year 是不是有點(diǎn)兒心酸呢厌殉?
閑來無聊,就研究了下Github貢獻(xiàn)板是根據(jù)什么規(guī)則進(jìn)行統(tǒng)計(jì)顯示的侈咕,發(fā)現(xiàn)這玩意還是動(dòng)態(tài)生成的公罕。
什么是動(dòng)態(tài)生成呢?
就是說Github在生成貢獻(xiàn)熱力圖的時(shí)候是會(huì)實(shí)時(shí)統(tǒng)計(jì)你創(chuàng)建的所有倉庫的commit情況耀销,比如你有個(gè)A倉庫楼眷,并且A倉庫在某天進(jìn)行了commit提交操作,那么對(duì)應(yīng)到Github的貢獻(xiàn)板上的相應(yīng)日期就會(huì)出現(xiàn)一個(gè)小綠點(diǎn)熊尉,小綠點(diǎn)的顏色深淺和你commit的次數(shù)成正比(但并不絕對(duì))罐柳,但是當(dāng)你把倉庫A從Github刪除的時(shí)候,這個(gè)小綠點(diǎn)也會(huì)跟著消失狰住,這就叫動(dòng)態(tài)生成张吉。(國內(nèi)Gitee碼云的貢獻(xiàn)面板則是一次性生成的綠點(diǎn)生成之后不會(huì)隨著相關(guān)倉庫的刪除而消失,請(qǐng)謹(jǐn)慎操作W)
那么小綠點(diǎn)深淺的具體規(guī)則又是什么呢芦拿?提交多少次才能變成最深的綠的呢?
有關(guān)這個(gè)規(guī)則我在Github官方并沒有找到任何說明查邢,不過網(wǎng)上有大佬可能自己試驗(yàn)出來了蔗崎。
甚至還有評(píng)論說給Github官方發(fā)過郵件,但是這個(gè)居然是機(jī)密扰藕?
哈哈哈缓苛,估計(jì)細(xì)節(jié)方面可能不大準(zhǔn)確了,畢竟人家官方都不愿意說肯定是有不為人知的秘密邓深,不過大概的規(guī)則肯定和上圖中的大佬說的差不多啦未桥。
說了這么多,那么我們究竟如何才能實(shí)現(xiàn)任意的對(duì)貢獻(xiàn)面板進(jìn)行修改呢芥备?時(shí)間還會(huì)倒流冬耿?
還真說到點(diǎn)子上了,關(guān)鍵點(diǎn)就在于時(shí)間萌壳。
其實(shí)Github統(tǒng)計(jì)的commit時(shí)間取決于Git倉庫中記錄的commit時(shí)間亦镶,而往Git倉庫中提交的時(shí)間是可以修改的。
由于對(duì)Git命令不是太熟袱瓮,一開始想到了通過修改系統(tǒng)時(shí)間來改變commit的時(shí)間缤骨,發(fā)現(xiàn)是可行的。
后來查到了commit命令有個(gè)--date參數(shù)尺借,可以實(shí)現(xiàn)提交時(shí)間的自定義绊起,格式為:
git commit --date="月 日 時(shí)間 年 +0800" -m "提交"
比如:
git commit --date="May 7 9:05:20 2016 +0800" -m "提交"
這樣就可以實(shí)現(xiàn)用過去的時(shí)間進(jìn)行提交。不過關(guān)于Github統(tǒng)計(jì)時(shí)間需要注意下根據(jù)官方說法是根據(jù)UTC時(shí)間統(tǒng)計(jì)的燎斩,不過我實(shí)測發(fā)現(xiàn)貌似和Github服務(wù)器的所在地點(diǎn)的時(shí)區(qū)有關(guān)虱歪,我訪問的服務(wù)器猜測在舊金山蜂绎,與北京時(shí)間差了16小時(shí),也就是說如果想要Github統(tǒng)計(jì)的時(shí)間是0點(diǎn)实蔽,那么你北京時(shí)間就要設(shè)置成16點(diǎn)才行荡碾。
自定義提交時(shí)間我們實(shí)現(xiàn)了谨读,接下來的事情就好辦啦局装,我們?nèi)绻獙?shí)現(xiàn)在Github貢獻(xiàn)板任意涂鴉,其實(shí)只需要知道哪一天我們需要commit多少次就好了劳殖,自定義提交時(shí)間用來決定我們想讓哪些格子有顏色铐尚,而commit次數(shù)的多少?zèng)Q定了顏色的深淺,這樣通過這兩者的結(jié)合哆姻,我們就可以輕松地創(chuàng)造出屬于自己的像素風(fēng)格的涂鴉啦宣增。
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
from git import Repo
import time
def timestamp_to_str(timestamp, format='%b %d %H:%M:%S %Y'):
return time.strftime(format, time.localtime(timestamp))
def str_to_timestamp(str_time, format='%Y-%m-%d %H:%M:%S'):
return int(time.mktime(time.strptime(str_time, format)))
if __name__ == '__main__':
repo = Repo('./你的本地倉庫地址')
git = repo.git
with open('./map.qs', 'r') as fp:
for line in fp.readlines():
line = line.split()
'''
github貢獻(xiàn)統(tǒng)計(jì)時(shí)間取決于服務(wù)器位置,當(dāng)前我測試發(fā)現(xiàn)和實(shí)際提交時(shí)間差了-16小時(shí)矛缨,
可能是使用的舊金山的時(shí)間爹脾,我懵的,如果顯示不對(duì)要自己改下后面時(shí)間箕昭。
'''
#os.system('date {} && time {}'.format(line[0], '16:00:00'))
for i in range(int(line[1])):
time_str = timestamp_to_str(str_to_timestamp(line[0] + ' 16:00:00')) + ' +0800'
git.commit('--allow-empty', '--date=' + time_str, '-m', line[0] + '_' + str(i+1))
原理就這么簡單灵妨,純屬無聊,如果你也同樣想玩的話可以照著方法去試試落竹。
如果嫌自己寫麻煩的話也可以直接用我寫好的工具泌霍。
項(xiàng)目地址:https://github.com/qinshuang1998/GithubPainter
里面有個(gè)用html寫的designer設(shè)計(jì)器,打開后會(huì)生成一個(gè)和Github一模一樣的貢獻(xiàn)板述召,你可以通過在上面點(diǎn)擊鼠標(biāo)來控制格子的顏色朱转,從而畫出你想要的圖形,最后點(diǎn)導(dǎo)出积暖,會(huì)生成一個(gè)out.qs的文件藤为,然后用commit.py的python腳本讀取它并對(duì)本地的Git倉庫進(jìn)行commit操作就好了(需要事先準(zhǔn)備好一個(gè)Git倉庫以供操作,腳本中的文件路徑等參數(shù)需要自己改動(dòng))夺刑,運(yùn)行完成后將你的本地倉庫push到Github上缅疟,然后就能看到你自己設(shè)計(jì)的像素圖形啦(生成時(shí)間不確定,24小時(shí)內(nèi)都可能)性誉。
我用這個(gè)在我出生那年畫了一個(gè)紀(jì)念生日的像素圖案窿吩,還給配上了蛋糕,哈哈哈你也來試試吧错览。
藝術(shù)無處不在纫雁,Github也不要放過噢。
注意:本項(xiàng)目僅供娛樂倾哺,請(qǐng)勿用于不當(dāng)途徑轧邪!產(chǎn)生的任何糾紛本項(xiàng)目概不負(fù)責(zé)刽脖。