Как мне получить git-версию моего проекта, если нет внесенных изменений? - PullRequest
0 голосов
/ 31 января 2019

Я хочу, чтобы у меня была возможность вернуть «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 () вернёт неизвестное.

Но даже когда у меня есть незафиксированные изменения,он получает правильный идентификатор ревизии.Я не совсем уверен, как добавить эту логику.

1 Ответ

0 голосов
/ 31 января 2019

HEAD можно анализировать как коммит, если есть текущий коммит и почти всегда текущий коммит.«Неподтвержденные изменения» не имеет отношения к тому, существует ли текущая фиксация.

Чтобы сравнить индекс и рабочее дерево с текущей фиксации, используйте git status.Чтобы сделать это надежно, в вашем собственном программном обеспечении рассмотрите возможность использования git --no-optional-locks status --porcelain=v2, возможно, также с -z, и чтения его выходных данных, что показано в документации git status .Затем ваш код может выбрать, что считать «незафиксированными изменениями» (включая неотслеживаемые файлы и, если вы добавите --ignored, игнорируемые файлы).

В этом конкретном случае вы можете просто использовать git describe --always --dirty и проверитьдля суффикса -dirty.Или - поскольку именно это git describe делает само по себе - запустите git diff-index --quiet HEAD и проверьте его состояние выхода: 0 означает «не грязный», 1 означает «грязный», все остальное означает «неспособен сказать, что-то пошло не так».Метод, использующий git status --porcelain..., является наиболее гибким, поскольку он позволяет you определить, что you означает "грязным", но два других гораздо проще.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...