当前位置:   article > 正文

程序猿Git项目代码自动提交神器-shell版_git 定时提交代码

git 定时提交代码

git代码自动提交系列短文

一,概述

程序猿Git项目代码自动提交神器中,我们已经实现了git项目周期性自动提交代码功能,此实现太复杂,下面我们来借助shell 来实现精简版的Git项目代码自动提交功能。

二,环境准备

云主机,centos7系统,安装组件:git

组件作用
git源码下载
crontab定时作业列表,linux内置,一般无需安装

安装git

#安装git
yum install -y git
  • 1
  • 2

三,项目代码准备

1. 新建项目

项目地址: https://gitcode.com/00fly/test
备用项目: https://gitee.com/00fly/git-cron

2. 启用个人令牌

登录后点击个人设置–> 访问令牌(经典)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

四,运行步骤

提交代码前需要先配置用户名和密码(也就是个人令牌)
在这里插入图片描述

00fly、00fly@noreply.gitcode.com请替换为自己的实际值

任意目录执行

#全局保存
git config --global user.name 00fly
git config --global user.email 00fly@noreply.gitcode.com
git config --global credential.helper store
  • 1
  • 2
  • 3
  • 4

项目保存目录执行

#需要先进入目录执行
mkdir /work/gitcode && cd /work/gitcode
git clone https://gitcode.com/00fly/test.git

#当前目录保存
cd /work/gitcode/test 
git config user.name 00fly
git config user.email 00fly@noreply.gitcode.com
git config credential.helper store
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

上面的步骤只需执行一次

1. 下载源码

使用git下载

mkdir /work/gitcode && cd /work/gitcode
git clone https://gitcode.com/00fly/test.git
  • 1
  • 2

2. 初始化

执行后,会拷贝all-in-one-cron.sh、all-in-one-cron-push.sh到上层目录

cd /work/gitcode/test && sh init.sh
  • 1

init.sh

#!/bin/bash
cp all-in-one-cron*.sh .. && dos2unix ../*.sh && chmod +x ../*.sh
  • 1
  • 2

3. 执行代码更新并提交

首次执行sh all-in-one-cron-push.sh需要输入用户名密码(个人令牌)

cd /work/gitcode && sh all-in-one-cron-push.sh
  • 1

all-in-one-cron-push.sh主要实现了3步骤

1. 更新git项目源码
2.保存本地git更新时间
3.更新代码并提交
  1. 进入本地项目目录/work/gitcode/test更新源码(git pull)并执行初始化(init.sh)
  2. 在本地项目目录/work/gitcode/test检查是否未更新或者最新一次提交时间戳(git log -1)大于本地git更新时间戳,如成立则更新last文件内容并打印最新1条日志
  3. 修改date.md 文件内容,调用git push推送代码

all-in-one-cron-push.sh

#!/bin/sh
# defines variable
git=`ls -d */` && path=`pwd` && gitpath=$path/$git

# git pull
cd $gitpath && git pull && sh init.sh \
&& now=`git log -1 --format="%at"` \
&& last=`cat $path/last`

# check timestamp, if changed print git log
if [ ! $last ] || [ $now -gt $last ] ; then
  echo "git changed!!" && echo $now>$path/last && echo `git log -1`
else
  echo "git not change"
fi

# git push
date > date.md
if [ -n "$(git status -s)" ] ; then
    git add .
    git commit -m "update: `date +"%Y-%m-%d %H:%M:%S"` auto commit"
    git push
fi
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

五,配置定时任务

1. 配置定时任务

#查看作业任务
crontab -l

#编辑作业任务
crontab -e
  • 1
  • 2
  • 3
  • 4
  • 5

添加内容
0 */1 * * * cd /work/gitcode&&sh all-in-one-cron-push.sh每1小时执行一次

或者

*/5 * * * * cd /work/gitcode&&sh all-in-one-cron-push.sh每5分钟执行一次

0 */4 * * * cd /work/gitcode&&sh all-in-one-cron-push.sh每4小时执行一次

注意:直接写为0 */4 * * * /work/gitcode/all-in-one-cron-push.sh,crontab执行pwd结果为/root

2. 查看提交日志

可以查看 提交日志 判断任务是否运行成功。

各位调试时请使用自己的git项目仓库(可fork本文git)

本文示例仓库地址


有任何问题和建议,都可以向我提问讨论,大家一起进步,谢谢!

-over-

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/寸_铁/article/detail/887787
推荐阅读
相关标签
  

闽ICP备14008679号