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
行为与它应该的相反吗?
您正在引用这个答案,其中显示:
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)