检查linux server某个路径下的 查看这个仓库中的文件A,是否有了新的变更,如果文件内容没有修改我就不做任何操作,如果有修改 我会执行添加 提交,push操作到仓库
方案1:
可以用 git status --porcelain -- 文件A 来判断某个文件是否有本地变更。没有输出就代表没变,不需要操作;有输出就执行 add / commit / push。
Linux 服务器上可以这样写:
cd /你的仓库路径 FILE="path/to/文件A" if [ -n "$(git status --porcelain -- "$FILE")" ]; then git add "$FILE" git commit -m "update 文件A" git push else echo "文件没有变化,不执行操作" fi
如果你只想判断“已跟踪文件内容是否修改”,不包含新文件,可以用:
方案二
cd /你的仓库路径 FILE="path/to/文件A" if ! git diff --quiet -- "$FILE"; then git add "$FILE" git commit -m "update 文件A" git push else echo "文件内容没有修改" fi
如果文件A可能是新建的、还没被 Git 跟踪,建议用第一种 git status --porcelain。
如果文件A一定已经被 Git 跟踪,第二种 git diff --quiet 更精确。
解释:
git diff --quiet -- "$FILE" 正常情况下没有任何输出。
它主要靠“退出码”判断结果:
git diff --quiet -- "$FILE" echo $?
含义是:
0 = 文件没有变更
1 = 文件有变更
其他 = 命令出错,比如路径不对、不是 git 仓库等
--quiet已经隐含了--exit-code
所以这两个命令效果基本一样:
git diff --quiet -- fileName
git diff --quiet --exit-code -- fileName
- 它仍然不会输出内容
--quiet 会关闭输出,只通过退出码判断:
0 = 没有差异 1 = 有差异 其他 = 出错
Linux/macOS 查看退出码:
git diff --quiet --exit-code -- fileName echo $?
Windows PowerShell 查看退出码:
git diff --quiet --exit-code -- fileName $LASTEXITCODE
如果你想看到 diff 内容,同时也让退出码反映是否有差异,可以去掉 --quiet:
git diff --exit-code -- fileName

浙公网安备 33010602011771号