假设没有提交的更改,如何获得项目的git版本?

时间:2019-01-30 22:19:01

标签: java git gradle

如果我在本地有未提交的更改,我希望有一种方法可以返回“未知”作为我的git版本。如果没有,它将返回正确的git版本。

String getGitRevision() {
    String gitRevision = "unknown"
    try {
        def cmd = "git rev-parse HEAD"
        def proc = cmd.execute()
        gitRevision = proc.text.trim()
    }
    catch (IOException ioe) {
        println "Fetch revision failed."
    }
    return gitRevision;
}

我希望当我在本地进行未提交的更改时,getGitRevision()返回未知。

但是,即使我有未提交的更改,它也会获取正确的修订版ID。我不确定如何在其中添加逻辑。

1 个答案:

答案 0 :(得分:1)

只要存在当前提交,

[{ "date": "2016-03-22 00:00:00", "symbol": "ACN", "open": "121.029999", "close": "121.470001", "low": "120.720001", "high": "122.910004", "volume": "711400.0" }, { "date": "2016-03-22 00:00:00", "symbol": "ACN", "open": "121.029999", "close": "121.470001", "low": "120.720001", "high": "122.910004", "volume": "711400.0" } ] 就可以作为提交进行解析,并且几乎总是有当前提交。 “未提交的更改”与是否有当前提交无关。

要比较索引和工作树当前提交,请使用HEAD。为了可靠地执行此操作,请在您自己的软件中考虑使用git status,也可能同时使用git --no-optional-locks status --porcelain=v2,并读取其输出,如the git status documentation所示。然后,您的代码可以选择要考虑的“未提交的更改”(包括未跟踪的文件,如果添加了-z,则可以忽略的文件)。

对于这种特殊情况,您可以仅使用--ignored并检查后缀git describe --always --dirty。或者-由于-dirty本身就是这样做的-运行git describe并检查其退出状态:0表示“不脏”,1表示“脏”,其他表示“无法分辨,出了点问题” ”。使用git diff-index --quiet HEAD的方法是最灵活的方法,因为它可以让 you 定义 you 的“脏”意思,而其他两个要简单得多。