我有一些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
部分。我该怎么办?
答案 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>
,这将输出更改(如果有的话),如果没有更改则不输出。