检查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 仓库等



 

  1. --quiet 已经隐含了 --exit-code

所以这两个命令效果基本一样:

git diff --quiet -- fileName
git diff --quiet --exit-code -- fileName
  1. 它仍然不会输出内容

--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

 

posted @ 2026-08-17 10:57  苹果芒  阅读(5)  评论(0)    收藏  举报