手把手教你刷github提交記錄

Teal發表於2018-02-20

前言

進入自己github主頁會看到自己的提交記錄,如果某天沒有提交記錄,那天的小方框就顯示灰色。強迫症的我,每次進來看著就感覺不爽, 想著自己每天記得提交點東西,爭取像阮一峰大神一樣,每天都有提交記錄。

阮一峰github提交記錄
阮一峰github提交記錄

但是,畢竟是人,哪天忙了就會忘記提交,所以想著能不能實現在自己阿里雲伺服器(linux系統)上,設定cron,定製下git命令,實現每天定點自動提交。

第一步:克隆我的專案

不同的克隆方式導致校驗方式不同,對應的免祕方式也不一樣。簡單來說,https通過記住賬號密碼免登,ssh通過校驗生成的金鑰免登。

  1. https克隆

https克隆
https克隆

  1. ssh克隆

ssh克隆
ssh克隆

如果,你已經克隆了專案,不知道採用了哪種方式,可以執行:

git remote -v
複製程式碼

如果是這樣:

origin https://github.com/tywei90/git-auto-commit.git (fetch)  
origin https://github.com/tywei90/git-auto-commit.git (push)  
複製程式碼

那麼就是https方式;

如果是這樣:

origin  git@github.com:tywei90/git-auto-commit.git (fetch)  
origin  git@github.com:tywei90/git-auto-commit.git (push)  
複製程式碼

那麼就是ssh方式。

更改克隆方式也很簡單:

https ——> ssh
git remote set-url origin git@github.com:tywei90/git-auto-commit.git

ssh ——> https
git remote set-url origin https://github.com/tywei90/git-auto-commit.git

第二步:免密登入

針對上面兩種克隆專案的方式,有兩種免密登入設定。

1.賬號密碼免登(https克隆)

cd git-auto-commit/.git
vim config
複製程式碼

在config檔案最後新增如下程式碼:

[credential]  
    helper = store
複製程式碼

儲存,輸入一次賬號密碼後第二次就會記住賬號密碼了

2.公鑰私鑰免登(ssh克隆)

2.1 生成公鑰和私鑰

檢查本機的ssh金鑰:

cd ~/.ssh 
ls
複製程式碼

如果提示:No such file or directory,說明你是第一次使用git,那就自己手動建立目錄

使用ssh-keygen命令生成ssh金鑰,命令如下:

ssh-keygen -t rsa
複製程式碼

輸入上面命令後,遇到選擇直接回車,即可生成ssh 金鑰。生成ssh 金鑰後,可以到~/.ssh目錄下檢視相關檔案,一般來說ssh 金鑰會包含id_rsa和id_rsa.pub兩個檔案,分別表示生成的私鑰和公鑰。

2.2 拷貝公鑰到你的github

在.ssh目錄下,執行cat id_rsa.pub,複製所有公鑰內容

點選github的頭像,在下拉選單中選擇 setting 選項,在開啟頁面的左側選單中點選 SSH and GPG keys,然後點選新頁面右上角綠色按鈕 New SSH key。填寫title值,並將複製的公鑰內容貼上到key輸入框中提交。

2.3 測試連結github

我看網上是輸入如下命令:

ssh –t git@github.com
複製程式碼

然後,我的會報ssh: Could not resolve hostname \342\200\223t: Name or service not known的錯誤,搜了下,解決辦法是執行下列命令:

ssh -t -p 22 git@github.com 
複製程式碼

-p表示修改伺服器埠為22,當提示輸入(yes/no)?時在後面輸入yes回車即可。但是最後還是報錯,後來又搜了下,執行如下程式碼:

ssh git@github.com
複製程式碼

即將-t去掉就好了,看到 Hi ** You've successfully authenticated, but GitHub does not provide shell access. 說明連線成功了,大家可以都試一試。

第三步:設定cron,定時自動提交任務

專案裡的add.js是用來修改records.txt的,每次執行會將當前的時間附加到records.txt檔案末尾。然後讓git自動提交即可。下面關鍵是cron的設定,對於linux系統不熟悉的我還是花了點時間的,這裡直接將cron設定貼上出來。先執行crontab -e進入cron編輯,然後貼上如下程式碼:

00 12 * * * cd /home/git-auto-commit && git pull && /root/.nvm/versions/node/v6.6.0/bin/node add.js && git commit -a -m 'git auto commit' && git push origin master && git log -1 | mail -s "git auto commit successfully!" wty2368@163.com
複製程式碼
  • 00 12 * * *的意思是,每天的12:00執行後面的命令。

  • /root/.nvm/versions/node/v6.6.0/bin/node是node二進位制執行檔案的絕對路徑,不能直接寫node命令,不會識別的。如何查出自己的node執行目錄,其實很簡單,執行which node即可。

  • 'git auto commit'是每次提交的comment,可以隨意發揮

  • git log -1 | mail -s "git auto commit successfully!" wty2368@163.com 是取最新的一次git提交記錄log作為郵件內容,"git auto commit successfully!"作為標題,傳送郵件給wty2368@163.com郵箱。當然這個是可選項,我想讓每次自動提交結束後給我發一封確認郵件,通過觀察郵件內容的date值是不是當前時間,就可以判斷這次自動提交是否成功。如果大家要實現這個功能,需要配置下linux郵件傳送設定,這個有時間再寫。主要要注意阿里雲伺服器對郵件25埠的限制,比較坑!

第四步:利用shell指令碼批量補上之前的提交記錄

上面的步驟解決了之後每天的git提交記錄,但是github自己主頁預設顯示之前一年的提交記錄,那如何補上之前的記錄呢?好在github的提交記錄時間以commit時間為準,所以我們可以更改自己電腦的時間,然後再commit。我係統是centos7,這裡僅以此為例。不同linux版本修改時間的命令可能不同,大家網上百度下,文章很多。

4.1 修改系統時間為想要彌補時間段的終點

比如,想要修改時間段位2018-01-01~2018-01-31,那麼需要修改系統時間為2018-01-31,指令碼如下:

timedatectl set-time '2018-01-31 13:00:00'
複製程式碼

4.2 進入專案目錄,執行loop指令碼

確定我們要修改的天數,2018-01-01到2018-01-31一共是31天,我們在命令列傳入此引數

cd git-auto-commit
screen -d -m -L sh loop.sh 31
複製程式碼

這裡,screen -d -m -L命令可以將我們執行的任務後臺,這樣即使退出伺服器連線也不會終止指令碼的執行。大家可以重新整理自己的github主頁,看看是不是灰色區域都變綠了。

後記

至此,github自動提交設定就完成了。我們來看下成果:

我的github提交記錄
我的github提交記錄

然後每天中午12點會受到郵件如下:

git自動提交郵件
git自動提交郵件

歡迎大家star學習交流:github地址 | 我的部落格

(完)

相關文章