前言

只有光头才能变强。

文本已收录至我的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. [转]JavaWeb工程 目录结构

    今天为此事纠结了一段时间. 以下是mavaen推荐的项目目录. ├── pom.xml └── src     ├── main     │   ├── java     │   │   └── my ...

  2. The Function() Constructor

    Functions are usually defined using the function keyword, either in the form of a function definitio ...

  3. P1023 活动安排

    题目描述 某个人可以在n个活动中选择一些出来参加.每个活动都有起止时间.而且每个时间段只能参加一个活动.问,这个人最多能加参加几个活动. 可以在活动结束时,立即开始新的活动. 输入格式 第一行是一个整 ...

  4. P1007 N钱M鸡问题

    题目描述 已知公鸡 \(5\) 元钱一只,母鸡 \(3\) 元钱一只,小鸡 \(3\) 只 \(1\) 元钱. 告诉你一个整数 \(n(1 \le n \le 1000)\) ,你现在要花 \(n\) ...

  5. idea运行项目时报错:Error:java无效的源发行版:1.8

    解决办法:project structure中设置 JDK 和language 匹配即可.如图: 另外如果有maven,需要把maven中JDK版本设置成一样的.

  6. C# 性能分析 反射 VS 配置文件 VS 预编译

    本文分析在 C# 中使用反射和配置文件和预编译做注入的性能,本文的数据是为预编译框架,开发高性能应用 - 课程 - 微软技术暨生态大会 2018 - walterlv提供 本文通过代码生成工具,使用C ...

  7. GitHub上传项目到远程库

    写文章 GitHub上传项目到远程库     GitHub上传项目到远程库 今天把想把文件托管到GitHub仓库,但是执行一系列的命令以后,刷新GitHub网站还是没有任何更新.后来终于找到原因,原来 ...

  8. JQuery仿购物网站放大镜特效所遇问题及思考

    JQuery仿购物网站放大镜特效所遇问题及思考 先贴下效果图,然后描述起来也就不会不知道我在说什么了. 我碰到的问题一: 一开始我自己总结了是因为两个小原因导致的①使用了mouseover,mouse ...

  9. git authentication failed for 或 fatal:not a git repository

    第一种解决 (我的是第一种解决) github上更改密码之后,我在本地操作git发现出错,错误代码如上,在网上搜了一圈,没有解决问题,后发现需要进行如下操作: 进入控制面板>用户账号>凭据 ...

  10. Channel 9视频整理【3】

    Will 保哥 微软mvp https://channel9.msdn.com/Niners/Will_Huang 繁体中文视频 Visual Studio 2017 新功能探索 https://ch ...