找出(使用Git)文件是否已更新

时间:2018-07-04 13:24:30

标签: git

我有一些Git存储库,这些存储库可以通过脚本自动更新。脚本的任务之一是为每个存储库(存储库包含Node.js项目)运行npm install

有时会导致更新的package-lock.json文件,如果更改了文件,我想自动提交。

我当然可以简单地运行:

git add package-lock.json
git commit -m 'Update dependencies.'

但是,如果文件未更新,则失败:git add只是不执行任何操作并以返回代码0退出,而git commit调用失败并以退出代码1退出。我该怎么做才能做到只有在实际更新文件的情况下?

换句话说:如果文件未更新,则我不希望发生git add / git commit部分。我该怎么办?

3 个答案:

答案 0 :(得分:2)

您可以使用git diff --exit-code --quiet <filename>检查文件是否被修改。如果返回值为1,则它已更改:

if ! git diff --exit-code --quiet package-lock.json ; then
    git add package-lock.json
    git commit -m 'Update dependencies.'
fi

话虽如此,没有必要事先检查文件而只运行行

git add package-lock.json
git commit -m 'Update dependencies.' || true

将具有相同的效果,并且返回值为0

答案 1 :(得分:1)

您可以使用git status --porcelain | grep . >/dev/null并检查grep退出状态以查看您的工作树是否已修改

之所以起作用,是因为git status --porcelain将输出所有更改,但是如果工作树是干净的,则不输出任何内容。 grep .如果找到匹配项将退出成功,否则将失败,并且.是“任何内容”的正则表达式

答案 2 :(得分:1)

您还可以使用git diff <filename>,这将输出更改(如果有的话),如果没有更改则不输出。