本地文件自動同步到GitHub

前言
java

只有光頭才能變強。git

文本已收錄至個人GitHub精選文章,歡迎Star程序員

https://github.com/ZhongFuCheng3y/3ygithub

這篇文章主要講講如何自動將本地文件保存到GitHub上面試

有人會好奇,爲何我要將本地文件保存到GitHub上呢?其實個人理由就只有一個:不知道爲何個人Typora有時候會出現沒法響應的狀況(直接卡死),這樣可能會致使寫了好久的內容會丟掉。vim

雞蛋在前陣子也計劃寫文章,我看他寫了兩個星期的文章,在某一天告訴我:Typora的文件壞了,怎麼修復阿。image.png最終的結果就是他寫了兩週的東西就這樣丟了。安全

有的人看到這裏可能就會說:誰讓你不用雲筆記的產品,自動同步到雲,用雲筆記的會有這種事嗎bash

這話也說得在理,只是Typora實在是好用(不僅僅是Typora,也有不少的好用產品只支持本地,沒有同步雲的功能)。微信

因而,我就打算定時將Typora的內容上傳到Github,以避免出現雞蛋的那種狀況。markdown

電腦環境:Mac 10.15.2

這篇是入門的文章,你全當是Git+Crontab的入門教程就行了!

1、爲何GitHub?

GitHub我就默認你們都知道它是什麼東西了,我寫過的文章都會收錄到GitHub,方便我後續的查閱:image.png若是關注GitHub的同窗會知道:GitHub給咱們提供了免費的私有倉庫(在之前都是公開倉庫)。image.png因而咱們能夠將本身不想公開的內容放到私有的倉庫上。

我將本地的文件同步到GitHub的緣由有兩個:

  1. 如今GitHub支持私有倉庫

  2. Git做爲程序員多多少少都會懂一些,並且它是真的方便。

2、動手

在動手以前,咱們能猜測到:想要定時將本地保存到GitHub上,知識點大概有如下:

  1. 懂一點點GitHub(擁有本身的GitHub帳號,建立一個私有倉庫)

  2. 懂一點點Git命令(有Git環境)

  3. 懂一點點Shell(定時腳本執行Git命令上傳)

image.png 2.1 建立一個私有倉庫

如何註冊GitHub,在GitHub建立一個私有倉庫,這裏我就很少講了。鼠標點點,就完成了image.png2.2 將本地文件上傳到GitHub倉庫

首先,我要把個人筆記目錄做爲Git能夠管理的倉庫,個人文件夾的名字叫作markdownimage.png因而我將markdown目錄變成Git能夠管理的倉庫image.png先試試能不能把本地的文件push到GitHub,因此咱們先add一下image.png而後commit一下image.png在push以前,咱們須要看看本身的機器有沒有跟GitHub倉庫關聯起來(通常第一次都沒有),首先咱們須要建立SSH Key。因而咱們能夠執行

ssh-keygen -t rsa -C "youremail@example.com"  --(引號的是本身的帳號郵箱)
image.png
期間咱們一路回車就行了,執行完以後,咱們能夠到用戶主目錄找到目錄[object Object]去目錄找出公鑰的文件[object Object]將公鑰的信息去GitHub上覆制對應的內容就行了。對應的GitHub地址是:[object Object]而後咱們就將本地倉庫與GitHub倉庫關聯起來:
git remote add origin git@github.com:ZhongFuCheng3y/markdown.git
image.png image.png
git push -u origin master

執行之後你可能會發現,出錯了。push不上去,錯誤以下:

image.png

咱們要先把遠程倉庫的readme同步到本地倉庫中,使用命令:

git pull --rebase origin master
image.png
完了之後,咱們就能夠看到已經把遠程倉庫的readme同步到本地了:[object Object]而後咱們再執行push命令將本地文件push到遠程倉庫中:
git push -u origin master
image.png
去GitHub的倉庫一看,就能夠發現已經將本地文件同步到GitHub上了:[object Object]

首先,咱們編寫一個腳本文件,這個腳本很是簡單,內容以下:

#!/bin/bash
cd /Users/3y/markdown
git add .
git commit -m "java3y auto save"
git push -u origin master

其實就是將上面的命令再寫一次,而後咱們就有了這個腳本了。我給這個腳本取名autoSave.sh

接着,給這個腳本增長權限(爲了方便我直接就是chmod 777)image.png有了腳本之後,咱們就能夠將這個腳本放到crontab上執行,在mac上使用crontab很是方便。咱們如今只須要記住兩個命令:

crontab -e    --編輯crontab
crontab -l    --查看crontab的命令

ok,因而咱們就能夠寫crontab命令了。這裏是很是簡單的,只要咱們懂一點點cron表達式就行了,若是不懂也不要緊,百度:「cron 在線生成器」 你就能夠隨本身喜愛的時間去調用了。image.png因而我就寫出瞭如下的cron表達式:

* * * * * /Users/3y/autoSave.sh > ~/b.txt 2>&1 &

完了之後,咱們執行crontab -l就發現這條命令再crontab中了:image.png解釋一下這條命令:

  • * * * * * 標誌我這行命令須要在每分鐘執行一次

  • /Users/3y/autoSave.sh 標誌個人腳本位置(這裏須要用絕對路徑

  • > ~/b.txt 2>&1 & 將腳本執行後的結果 輸入到b.txt文件上

完成!咱們就能夠看到每分鐘都會將本地的文件內容上傳到GitHub上了

調試完成後,咱們就能夠將日誌輸出到/dev/nullimage.png2.3.1 可能會遇到的坑

在將命令最開始寫到crontab時,我是沒有打印執行的結果的。發現沒有調用成功,排查了很久都沒排查出來(一度懷疑是否是個人電腦crontab有問題)…

我當時還寫了另外一段腳本去看一下個人crontab有沒有問題,再後來把執行的結果寫到文件上的

  • 執行一段程序也好,一段腳本也好,在最編寫的時候必定要打日誌

期間也遇到過奇奇怪怪的坑,這裏列一下,但願後續的人看到我這篇文章能解決掉類似的問題:

  1. 腳本寫完,記得加上可執行的權限

  2. 保存crontab的時候,遇到"/usr/bin/vi" exited with status 1,能夠嘗試把crontab的進行殺掉,再從新啓動。或者在.zshrc添加export EDITOR=vim

  3. 若是在輸出的結果上遇到Operation not permitted,把iTerm加上徹底磁盤訪問權限

    1. 打開mac的系統偏好設置 〉安全性與隱私〉隱私〉徹底磁盤訪問權限,加入iTerm而後勾選就好了

  4. 文件屬性帶有@,不要把腳本和文件夾放在Download目錄下,Mac在執行crontab時會有奇奇怪怪的權限問題。

2.4 此次用到的命令

crontab服務:

開啓:sudo /usr/sbin/cron start
重啓:sudo /usr/sbin/cron restart
中止:sudo /usr/sbin/cron stop

編寫crontab:crontab -e
查看crontab:crontab -l

殺死進程:

kill -9 pid

Git相關命令:

參考廖雪峯Git教程擼一下就能夠了:
https://www.liaoxuefeng.com/wiki/896043488029600

最後

這篇文章主要是用Mac來說解如何將本地文件自動同步到GitHub的,不少同窗就會想:大哥,我用的是Windows,你給我講Mac有啥用阿

Mac能實現的,Windows也能實現,只不過方式和手段可能存在一點點區別而已,有興趣的同窗能夠去折騰一下。

我在寫這篇文章以前,我也不知道Mac的crontab會遇到這麼多的問題,也花了我很多的時間去解決。對於這些問題,我也不懂。可是咱們能夠去找方案,找解決的辦法,最終仍是能夠完成的。

可能你會看到個人終端花花綠綠的,我用的是iTerm+一系列插件組成的(Mac),想要對應的教程的同窗能夠在公衆號下回復「工具」便可獲取

看完這篇文章的同窗可能會有不少話想說,由於crontab+腳本能夠完成一系列有趣的東西,不妨在評論區留言你用crontab作了什麼有趣的事

參考資料(微信不支持外鏈,想要參考連接的同窗回覆「同步」便可獲取:

  • crontab沒法執行腳本緣由及解決方法

  • macOS中使用crontab教程以及問題解決辦法

  • 每日自動將你的網站備份到Github 告別數據丟失

  • Linux定時任務Crontab命令詳解

  • crontab 腳本錯誤日誌和正確的輸出寫入到文件

歡迎加入 交流羣 學習,備註 加羣 說實話在這個羣,哪怕您不說話,光看聊天記錄,都能學到東西

image.png

兩年嘔心瀝血的文章「面試題」「基礎」「進階」這裏全都有!

image.png 300多篇原創技術文章 加入 交流羣 學習 海量視頻資源 精美腦圖 面試題

長按掃碼可關注獲取 

在看和分享對我很是重要!

相關文章
相關標籤/搜索