進入本身github主頁會看到本身的提交記錄,若是某天沒有提交記錄,那天的小方框就顯示灰色。強迫症的我,每次進來看着就感受不爽, 想着本身天天記得提交點東西,爭取像阮一峯大神同樣,天天都有提交記錄。node
可是,畢竟是人,哪天忙了就會忘記提交,因此想着能不能實如今本身阿里雲服務器(linux系統)上,設置cron,定製下git命令,實現天天定點自動提交。linux
不一樣的克隆方式致使校驗方式不一樣,對應的免祕方式也不同。簡單來講,https經過記住帳號密碼免登,ssh經過校驗生成的密鑰免登。git
若是,你已經克隆了項目,不知道採用了哪一種方式,能夠執行:github
git remote -v
複製代碼
若是是這樣:shell
origin https://github.com/tywei90/git-auto-commit.git (fetch)
origin https://github.com/tywei90/git-auto-commit.git (push)
複製代碼
那麼就是https方式;vim
若是是這樣:centos
origin git@github.com:tywei90/git-auto-commit.git (fetch)
origin git@github.com:tywei90/git-auto-commit.git (push)
複製代碼
那麼就是ssh方式。bash
更改克隆方式也很簡單:服務器
https ——> ssh
git remote set-url origin git@github.com:tywei90/git-auto-commit.git
ssh
ssh ——> https
git remote set-url origin https://github.com/tywei90/git-auto-commit.git
針對上面兩種克隆項目的方式,有兩種免密登陸設置。
cd git-auto-commit/.git
vim config
複製代碼
在config文件最後添加以下代碼:
[credential]
helper = store
複製代碼
保存,輸入一次帳號密碼後第二次就會記住帳號密碼了
檢查本機的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兩個文件,分別表示生成的私鑰和公鑰。
在.ssh目錄下,執行cat id_rsa.pub
,複製全部公鑰內容
點擊github的頭像,在下拉菜單中選擇 setting 選項,在打開頁面的左側菜單中點擊 SSH and GPG keys,而後點擊新頁面右上角綠色按鈕 New SSH key。填寫title值,並將複製的公鑰內容粘貼到key輸入框中提交。
我看網上是輸入以下命令:
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. 說明鏈接成功了,你們能夠都試一試。
項目裏的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端口的限制,比較坑!
上面的步驟解決了以後天天的git提交記錄,可是github本身主頁默認顯示以前一年的提交記錄,那如何補上以前的記錄呢?好在github的提交記錄時間以commit時間爲準,因此咱們能夠更改本身電腦的時間,而後再commit。我係統是centos7,這裏僅以此爲例。不一樣linux版本修改時間的命令可能不一樣,你們網上百度下,文章不少。
好比,想要修改時間段位2018-01-01~2018-01-31,那麼須要修改系統時間爲2018-01-31,腳本以下:
timedatectl set-time '2018-01-31 13:00:00'
複製代碼
肯定咱們要修改的天數,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自動提交設置就完成了。咱們來看下成果:
而後天天中午12點會受到郵件以下:
(完)