我有一些Git存储库,它们通过脚本自动更新。脚本的任务之一是为每个存储库运行npm install (存储库包含Node.js项目)。
这有时会导致更新的package-lock.json文件,如果它被更改,我会自动提交它。
当然,我可以简单地运行:
git add package-lock.json
git commit -m 'Update dependencies.'但是,如果文件没有更新,这就失败了:虽然git add只使用返回代码0执行任何操作并退出,但是git commit调用在退出代码1时失败。我如何才能做到这一点,只有当文件实际更新时才会发生?
换句话说:如果文件没有更新,我不希望git add/git commit部分发生。我怎么能这么做?
发布于 2018-07-04 13:38:42
您可以使用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。
发布于 2018-07-04 13:39:20
您可以使用git status --porcelain | grep . >/dev/null并检查grep退出状态,以查看工作树是否有修改。
它可以工作,因为git status --porcelain将输出所有更改,但如果工作树是干净的,则没有输出。如果找到匹配,grep .将退出“成功”,如果没有,则退出“失败”,.是“任何”的正则表达式
发布于 2018-07-04 13:51:55
您还可以使用git diff <filename>,这将输出更改(如果有的话),如果没有更改,则不会输出任何更改。
https://stackoverflow.com/questions/51174807
复制相似问题