本地文件自动同步到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多篇原创技术文章 加入 交流群 学习 海量视频资源 精美脑图 面试题

长按扫码可关注获取 

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

相关文章
相关标签/搜索