检测git变化并提交
比如:
新建一个名为 autocommit.sh
的脚本,内容为:
#!/bin/bash
cd /path/project
# 检查是否有待暂存的更改
CHANGES=$(git status --porcelain)
if [ -n "$CHANGES" ]; then
echo "Changes detected. Committing..."
# 添加所有变更到暂存区
git add .
# 提交所有暂存的变更,这里你可以自定义提交信息
git commit -m "Automatic commit at $(date)"
fi
-n
是一个测试操作符,用于测试字符串是否不为空。
具体来说:
-n STRING
:如果STRING
的长度非零(即字符串不为空),则返回真(true),退出状态码为0。"$VARIABLE"
:双引号包围变量$VARIABLE
是为了防止空格或特殊字符导致的错误解析。然后定时执行就可以了,比如:
while true; do
bash /path/autocommit.sh
sleep 60;
done
或者直接把 autocommit.sh 放到定时任务执行,比如:
* * * * * /bin/bash /path/autocommit.sh >/dev/null 2>&1 &
这里每分钟执行一次。
当然,这里前提还要先拉取下,并检测是否有冲突等,再决定是否提交。
检测 git 文件是否发生了冲突可参考 检测git中是否有文件发生了冲突。
实例:
#!/usr/bin/env bash
# * * * * * /bin/bash /path/bin/mynotes_autocommit.sh >/dev/null 2>&1 &
# nohup bash /path/bin/mynotes_autocommit.sh >/dev/null 2>&1 &
# 监控的根目录和批处理文件
src_dir="/path/Documents/我的笔记"
git="/usr/bin/git"
cd "$src_dir";
# 检查是否有待暂存的更改
CHANGES=$($git status --porcelain)
if [ -n "$CHANGES" ]; then
# $git pull origin main
#if [ -n "$($git diff --name-only --diff-filter=U)" ]; then
# osascript -e "display notification \"自动提交时发现有冲突文件,请手动处理!\" with title \"提示:\""
# exit 1
#fi
# 添加所有变更到暂存区
$git add .
# 提交所有暂存的变更,这里你可以自定义提交信息
$git commit -m "Automatic commit at $(date)"
#$git push origin main
fi
为什么这里 git 路径要赋值给变量 git="/usr/bin/git"
,参考 为什么在终端可以直接输入gsed,而在crontab脚本里必须输入全路径?。