本地文件自動同步到GitHub


轉載  :  https://blog.csdn.net/Java_3y/article/details/103966416?depth_1-utm_source=distribute.pc_feed.none-task&request_id=&utm_source=distribute.pc_feed.none-task

 

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

一、為什么GitHub?

GitHub我就默認大家都知道它是什么東西了,我寫過的文章都會收錄到GitHub,方便我后續的查閱:

如果關注GitHub的同學會知道:GitHub給我們提供了免費的私有倉庫(在以前都是公開倉庫)。

於是我們可以將自己不想公開的內容放到私有的倉庫上。

我將本地的文件同步到GitHub的原因有兩個:

  1. 現在GitHub支持私有倉庫

  2. Git作為程序員多多少少都會懂一些,而且它是真的方便。

二、動手

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

  1. 懂一點點GitHub(擁有自己的GitHub賬號,創建一個私有倉庫)

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

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

 

2.1 創建一個私有倉庫

如何注冊GitHub,在GitHub創建一個私有倉庫,這里我就不多講了。鼠標點點,就完成了

2.2 將本地文件上傳到GitHub倉庫

首先,我要把我的筆記目錄作為Git可以管理的倉庫,我的文件夾的名字叫做markdown

於是我將markdown目錄變成Git可以管理的倉庫

先試試能不能把本地的文件push到GitHub,所以我們先add一下

然后commit一下

在push之前,我們需要看看自己的機器有沒有跟GitHub倉庫關聯起來(一般第一次都沒有),首先我們需要創建SSH Key。於是我們可以執行

ssh-keygen -t rsa -C "youremail@example.com"  --(引號的是自己的賬號郵箱) 

期間我們一路回車就好了,執行完之后,我們可以到用戶主目錄找到.ssh目錄

.ssh目錄找出公鑰的文件id_rsa.pub

將公鑰的信息去GitHub上復制對應的內容就好了。對應的GitHub地址是:https://github.com/settings/keys

然后我們就將本地倉庫與GitHub倉庫關聯起來:

git remote add origin git@github.com:ZhongFuCheng3y/markdown.git

關聯了以后,我們就可以將本地倉庫push到遠程倉庫了

git push -u origin master

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

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

git pull --rebase origin master

完了以后,我們就可以看到已經把遠程倉庫的readme同步到本地了:

然后我們再執行push命令將本地文件push到遠程倉庫中:

git push -u origin master

去GitHub的倉庫一看,就可以發現已經將本地文件同步到GitHub上了:

2.3 寫腳本自動定時上傳

首先,我們編寫一個腳本文件,這個腳本非常簡單,內容如下:

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

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

接着,給這個腳本增加權限(為了方便我直接就是chmod 777)

有了腳本以后,我們就可以將這個腳本放到crontab上執行,在mac上使用crontab非常方便。我們現在只需要記住兩個命令:

  1.  
    crontab -e    --編輯crontab
  2.  
    crontab -l    --查看crontab的命令

ok,於是我們就可以寫crontab命令了。這里是非常簡單的,只要我們懂一點點cron表達式就好了,如果不懂也沒關系,百度:“cron 在線生成器” 你就可以隨自己喜好的時間去調用了。

於是我就寫出了以下的cron表達式:

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

完了以后,我們執行crontab -l就發現這條命令再crontab中了:

解釋一下這條命令:

  • * * * * * 標志我這行命令需要在每分鍾執行一次

  • /Users/3y/autoSave.sh 標志我的腳本位置(這里需要用絕對路徑)

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

完成!我們就可以看到每分鍾都會將本地的文件內容上傳到GitHub上了

調試完成后,我們就可以將日志輸出到/dev/null

2.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服務:

  1.  
    開啟:sudo /usr/sbin/cron start
  2.  
    重啟:sudo /usr/sbin/cron restart
  3.  
    停止:sudo /usr/sbin/cron stop
  4.  
     
  5.  
    編寫crontab:crontab -e
  6.  
    查看crontab:crontab -l

殺死進程:

kill -9 pid 

Git相關命令:

  1.  
    參考廖雪峰Git教程擼一下就可以了:
  2.  
    https: //www.liaoxuefeng.com/wiki/896043488029600


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM