编写Bash脚本检查Git近2日提交时的逻辑错误排查
问题分析与修正:Bash脚本Git提交检查逻辑错误
核心错误点
- 逻辑判断完全倒置:
[[ -n "..." ]]用于判断命令输出非空,当最近有提交时,git log会输出修改的文件名,此时条件为真,但你却输出了“No Commits last 2 days”,和实际逻辑完全相反。 - 时间参数不匹配:脚本里写的是
--since="200 days ago",但提示文本是“last 2 days”,参数和需求不符。 - 冗余的文件名判断:你只需检查是否存在提交,没必要输出并去重文件名,直接判断
git log是否有输出更简洁可靠。 - 重复克隆仓库:每次运行脚本都会执行
git clone,如果目标目录已存在会报错,完全没必要重复克隆。
修正后的脚本
MY_PATH="C:/test" REPO_DIR="$MY_PATH/docker-react" REPO_URL="https://github.com/test-repo/docker-react.git" # 检查仓库是否已存在,不存在再克隆 if [[ ! -d "$REPO_DIR" ]]; then mkdir -p "$MY_PATH" git clone "$REPO_URL" "$REPO_DIR" fi cd "$REPO_DIR" git checkout master git pull # 拉取最新代码,避免基于本地旧版本判断 # 检查最近2天是否有提交 if git log --since="2 days ago" --pretty=format:"%h" | grep -q .; then echo "Commits available in the last 2 days" else echo "No commits in the last 2 days" fi
修正说明
- 先判断仓库目录是否存在,避免重复克隆报错。
- 加入
git pull确保本地代码是最新状态,避免基于旧仓库的提交记录判断出错。 - 用
git log --since="2 days ago" --pretty=format:"%h"仅输出提交哈希,配合grep -q .静默检查是否有输出(只要有提交就返回真)。 - 逻辑判断与输出文本完全匹配:有提交时提示存在提交,无提交时提示无提交。
内容的提问来源于stack exchange,提问作者Ashwin
相关产品推荐
相关产品推荐

