在 bash 中检查 git 中的任何更改时 if-then-else 条件的预期行为与在 github actions 工作流程中编写时相反

jar*_*jar 3 git github github-actions

如果您在没有更改的情况下有提交语句,那么它将返回退出代码 1,这将导致 GitHub 工作流失败。

作为解决方法,我尝试修改此SO 帖子以及此答案中的解决方案,该答案基本上是使用 -

git diff-index --quiet HEAD
Run Code Online (Sandbox Code Playgroud)

在我当地的 bash 上,它按预期工作。当我运行时echo "$?",输出 1 或 0 符合我的预期。

基于该文档和有关在 GitHub 工作流程中设置环境变量的文档,我的工作流程文件中有以下内容 -

git diff-index --quiet HEAD
Run Code Online (Sandbox Code Playgroud)

但是,每当有要提交或跟踪的更改时,环境变量changes_exist就会发生变化false,反之亦然。

这与我的期望恰恰相反。

作为一种解决方法,直到我弄清楚这一点,我使用以下在工作人员中完美运行的方法 -

git diff-index --quiet HEAD || git commit -m "updating datasets"
Run Code Online (Sandbox Code Playgroud)

知道为什么上面的方法有效,而使用的if - then - else行为与它应该的相反吗?

Von*_*onC 6

您正在引用这个答案,其中显示:

git diff-index --quiet HEAD || git commit -m 'bla'
Run Code Online (Sandbox Code Playgroud)

这意味着,如果以下情况发生变化! git diff:只有当提交部分git diff为 false、失败、不同于 0 时,才会执行
提交部分。它可以写为:

if ! git diff-index --quiet HEAD; then git commit -m 'bla'; fi
Run Code Online (Sandbox Code Playgroud)

换句话说,在你的情况下:

if ! git diff-index --quiet HEAD; then
        echo "changes_exist=true" >> $GITHUB_ENV
Run Code Online (Sandbox Code Playgroud)