如何检查我的git存储库中是否有任何未提交的更改:
从脚本?
git-status git版本1.6.4.2似乎总是返回零.
作为构建过程的一部分,我正在运行git commit作为执行shell步骤.但是,如果工作区中没有更改,Jenkins将无法进行构建.这是因为当没有提交更改时,git返回错误代码.我想要中止构建,或者只是在这种情况下将其标记为不稳定.有任何想法吗?
我有一个Jenkins作业,它使用Maven(mvn clean install)从github.com存储库的主分支构建,然后检查Java文件中的许可证头和缺少的NOTICE文件,并在必要时添加它们(mvn license:format notice:generate).有时这会导致更改或添加文件,有时不会.
每当有已作出(由许可证插件)的任何改变我要推更改到GitHub库.
现在我无法弄清楚如何最好地实现这一目标.我在Maven许可插件之后添加了一个shell构建步骤,执行git命令:
git add . # Just in case any NOTICE files have been added
git commit -m "Added license headers"
Run Code Online (Sandbox Code Playgroud)
git add .单独工作,即不会破坏构建,即使没有添加任何文件.但是,git commit如果根本没有任何更改,请中断构建.
我不担心回到github,因为我相信Git Publisher的后期构建操作可以为我做这件事.有人可以指点我正确的git提交方向吗?
如果您在没有更改的情况下有提交语句,那么它将返回退出代码 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行为与它应该的相反吗?
我正在尝试执行下面提到的代码。代码创建一个分支,然后从工作树目录完成工作树和提交
代码失败并出现以下错误:
error= exit status 1
Run Code Online (Sandbox Code Playgroud)
如果我直接从命令行执行提交(Cmd3),它工作正常:
sh-3.2# /usr/bin/git -C /Users/gitissue/folder1/Outer commit -m Commiting-from-folder1-Outer
On branch Outer
nothing to commit, working tree clean
Run Code Online (Sandbox Code Playgroud)
脚步:
环境详情:
代码:
package main
import (
"fmt"
"io"
exec "os/exec"
)
func main() {
Cmd := exec.Command("git", "-C", "/Users/gitissue", "branch", "Outer")
fmt.Print("Cmd1= " + Cmd.String())
err := execBashCmd(Cmd)
if err != nil {
fmt.Print("error1= …Run Code Online (Sandbox Code Playgroud) 在Travis-ci中,我正在使用此命令。
git push origin HEAD:${TRAVIS_PULL_REQUEST_BRANCH:-$TRAVIS_BRANCH}
除非没有什么可提交的,否则所有这些工作都很好(响应:)Everything up-to-date。
在我的情况下,这是一个很好的响应,但是它导致:exited with 1.这是我想避免的事情。无论它是否能够提交还是全部更新,我都希望做出回应exit 0。
我怎样才能做到这一点?
更新:
正如@Mort在评论中所提到的,它|| true可以工作,但是现在我始终具有积极的退出状态。我只想更改的Git退出代码Everything up-to-date。