zoukankan      html  css  js  c++  java
  • 本地文件自动同步到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
  • 相关阅读:
    剑指offer--面试题14--收获
    剑指offer--面试题14
    剑指offer--面试题13
    剑指offer--面试题12
    剑指offer--面试题11
    高质量代码
    剑指offer--面试题10--相关
    剑指offer--面试题10
    位运算及其操作
    负数在计算机中的表示方法
  • 原文地址:https://www.cnblogs.com/joker-game/p/12395878.html
Copyright © 2011-2022 走看看