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

Java 假设没有提交的更改,如何获得项目的git版本?,java,git,gradle,Java,Git,Gradle,如果我在本地有未提交的更改,我希望有一种方法能够将“unknown”作为我的git修订返回。如果没有,它应该返回正确的git版本 String getGitRevision() { String gitRevision = "unknown" try { def cmd = "git rev-parse HEAD" def proc = cmd.execute() gitRevision = proc.text.trim()

如果我在本地有未提交的更改,我希望有一种方法能够将“unknown”作为我的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()返回unknown


但即使我有未提交的更改,它也会获取正确的修订id。我真的不确定如何添加该逻辑。

HEAD
可以解析为提交,只要存在当前提交,并且几乎总是存在当前提交。“未提交的更改”与是否存在当前提交无关

要将索引和工作树与当前提交进行比较,请使用
git status
。要做到这一点,在您自己的软件中,考虑使用<代码> Git——没有可选的锁状态--Guale= V2,也许还有<代码> -Z/COM>,并读取它的输出,如图所示。然后,您的代码可以选择要考虑“未提交更改”的内容(包括未跟踪的文件,以及如果添加“代码> >忽略< /代码>,忽略文件”。

对于这种特殊情况,您可以使用git descripe--always--dirty并检查
-dirty
后缀。或者因为这是git描述的本身运行的git diff index——quiet HEAD并检查其退出状态:0表示“不脏”,1表示“脏”,其他任何表示“无法判断,出了问题”。使用
git status--cereal…
的方法是最灵活的,因为它允许您定义“脏”的含义,但其他两种方法要简单得多