前言

只有光头才能变强。

文本已收录至我的GitHub精选文章,欢迎Starhttps://github.com/ZhongFuCheng3y/3y

这篇文章主要讲讲如何自动将本地文件保存到GitHub上

有人会好奇,为什么我要将本地文件保存到GitHub上呢?其实我的理由就只有一个:不知道为什么我的Typora有时候会出现无法响应的情况(直接卡死),这样可能会导致写了很久的内容会丢掉。

鸡蛋在前阵子也计划写文章,我看他写了两个星期的文章,在某一天告诉我:Typora的文件坏了,怎么修复阿。

最终的结果就是他写了两周的东西就这样丢了。

有的人看到这里可能就会说:谁让你不用云笔记的产品,自动同步到云,用云笔记的会有这种事吗

这话也说得在理,只是Typora实在是好用(不单单是Typora,也有很多的好用产品只支持本地,没有同步云的功能)。

于是,我就打算定时将Typora的内容上传到Github,以免出现鸡蛋的那种情况。

电脑环境:Mac 10.15.2

这篇是入门的文章,你全当是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 写脚本自动定时上传

首先,我们编写一个脚本文件,这个脚本非常简单,内容如下:

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

其实就是将上面的命令再写一次,然后我们就有了这个脚本了。我给这个脚本取名autoSave.sh

接着,给这个脚本增加权限(为了方便我直接就是chmod 777 )

有了脚本以后,我们就可以将这个脚本放到crontab上执行,在mac上使用crontab非常方便。我们现在只需要记住两个命令:

crontab -e    --编辑crontab
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然后勾选就行了
    2. 文件属性带有@,不要把脚本和文件夹放在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做了什么有趣的事

参考资料:

本已收录至我的GitHub精选文章,欢迎Starhttps://github.com/ZhongFuCheng3y/3y

乐于输出干货的Java技术公众号:Java3y。公众号内有300多篇原创技术文章、海量视频资源、精美脑图,关注即可获取!

非常感谢人才们能看到这里,如果这个文章写得还不错,觉得「三歪」我有点东西的话 求点赞 求关注️ 求分享

自动将本地文件保存到GitHub的更多相关文章

  1. 将XML文件保存到DataGridView中

    #region get护理单记录信息XML //将XML文件保存到DataTable private DataTable FromXML2DataTable(string XMLStr,string ...

  2. android如何保存读取读取文件文件保存到SDcard

    android如何保存读取读取文件文件保存到SDcard 本文来源于www.ifyao.com禁止转载!www.ifyao.com 上图为保存文件的方法体. 上图为如何调用方法体保存数据. 上面的截图 ...

  3. [置顶] Android学习系列-把文件保存到SD卡上面(6)

    Android学习系列-把文件保存到SD卡上面(5) 一般多媒体文件,大文件需要保存到SD卡中.关键点如下: 1,SD卡保存目录:mnt/sdcard,一般采用Environment.getExter ...

  4. Git学习(2)-使用Git 代码将本地文件提交到 GitHub

    上次随笔写到git的安装和运用命令窗口创建本地版本库,这次主要讲一下用git代码将本地文件提交到GitHub上. 前提是有一个GitHub账号. 1.创建一个新的版本库,进入到你本地项目的根目录下(我 ...

  5. Android 将文件保存到SD卡,从卡中取文件,及删除文件

    //保存到SD卡 private static String sdState = Environment.getExternalStorageState();     private static S ...

  6. 将本地文件传输到GitHub

    统一概念: 工作区:增删文件和内容 暂存区:键入命令 git add 改动的文件,此次改动就放到了 『暂存区』 本地仓库 :键入命令 git commit ,此次改动就放到了『本地仓库』,每个 com ...

  7. git生成Key操作保存到GITHUB中

    https://blog.csdn.net/sinat_23880167/article/details/78502528 1. 在git中通过命令: $ ssh-keygen Generating ...

  8. Linux笔记(开机自动将kerne log保存到SD卡中)

    有时候为了测试机器的稳定性,需要煲机测试几天的情况,这个时候机器已经封装好,不能再接串口线出来. 为了追溯问题,就需要将log信息保存下来. 于是就需要这样一个功能:系统启动后,自动将kernel的l ...

  9. yii phpexcel自己主动生成文件保存到server上

    近期再整一个报表任务,每天必须把表导出来按excel格式发送邮件给管理员,利用phpexcel把表保存到server上.然后再通过phpmailer发送就ok. ob_end_clean();     ...

随机推荐

  1. Windows Community Toolkit 3.0 新功能 在WinForms 和 WPF 使用 UWP 控件

    本文告诉大家一个令人震惊的消息,Windows Community Toolkit 有一个大更新,现在的版本是 3.0 .最大的提升就是 WinForm 和 WPF 程序可以使用部分 UWP 控件. ...

  2. poj 2996

    提示:很烦很简单的国际象棋棋盘模拟,输入比较麻烦而已 输出时: 1.不论黑白,KQRBN P均是依次输出,强制大写,但不输出“P”,只输出其坐标 2.对白棋的位置,小行优先大行输出(行的数字越小则优先 ...

  3. java 集合之Arraylist的遍历及排序

    最近培训是先学习java基础 从最基本的开始学起 因为今天刚刚开博客 要把上周的一些重点内容归纳一下 1.Arraylist常用遍历以及排序 import java.util.ArrayList; i ...

  4. 2019-8-31-ASP.NET-Core-开启后台任务

    title author date CreateTime categories ASP.NET Core 开启后台任务 lindexi 2019-08-31 16:55:58 +0800 2019-3 ...

  5. AWS Credentials 使用

    AWS的文档系统真是烂到家了!!!!! To connect to any of the supported services with the AWS SDK for Java, you must ...

  6. H3C 用三层交换机实现VLAN间路由

  7. hihocoeder1384

    hihocoeder1384 算法竞赛进阶指南上的题目 我们肯定是吧最大值和最小值匹配,次大值和次小值匹配以此类推 首先,类似于区间覆盖的思想,我们对于一个\(L\),找到最大的满足条件的\(R\) ...

  8. linux zookeeper开机启动

    1.在zkEnv.sh中指定当前用户jdk环境变量 export JAVA_HOME=/usr/local/src/jdk1.7.0_55/ 2.在/etc/rc.d/init.d文件夹下创建zook ...

  9. ssh批量免密

    expect命令在linux下实现批量ssh免密 发布时间:2017-11-27 08:41:39 投稿:laozhang 本次文章主要给大家讲解了在linux系统下用expect命令实现批量ssh免 ...

  10. androidBLE dfu升级使用及可能出现的问题

    android-dfu-library是nordic提供的对nRF5x芯片固件进行空中升级的库,地址是https://github.com/NordicSemiconductor/Android-DF ...