Как заставить “мерзавца описать”, упоминают присутствие или отсутствие локальных изменений?

Как я могу проверить в сценарии, если локальные изменения присутствуют? Возможно, в сочетании с git describe?

5
задан Adrian Panasiuk 31 December 2009 в 12:56
поделиться

3 ответа

Вам нужно будет убедиться, что соблюдаются оба следующих свойства:

  1. Отсутствие различий между HEAD и индексным кешем

    git diff-index --cached HEAD

  2. Что нет различий между индексом и рабочим деревом:

    git diff-files

Обе команды принимают параметр - quiet , который устанавливает код выхода в зависимости от наличия есть различия или нет (начиная с некоторого времени после git 1.4). Если вам нужно заставить его работать на git 1.4, вам нужно запустить команды без - quiet и проверить, производят ли они какой-либо вывод.

Примечание: git diff - это фарфоровая команда, поэтому ее не следует использовать в скриптах. Вместо этого используйте приведенные выше команды сантехники.

Пример кода оболочки, взятый из моего сценария git_version.sh :

git_dirty=yes
# git-1.4 does not understand "git-diff-files --quiet"
# git-1.4 does not understand "git-diff-index --cached --quiet HEAD"
if [ "x$($GIT diff-files)" = "x" ] && [ "x$($GIT diff-index --cached HEAD)" = "x" ]; then
    git_dirty=no
fi

Если вам может потребоваться версия git> = 1.5, если git diff-files --quiet && git diff- index --quiet --cached HEAD; тогда может заменить приведенное выше сравнение.

Примечание: Это решение (точно так же, как Antony interactive git diff HEAD --quiet ) обнаруживает только локальные изменения относительно HEAD. Тем не менее, локальные коммиты также могут считаться локальными изменениями и, естественно, не будут отображаться ни в каких различиях для HEAD. Вам нужно будет проверить значение SHA1, которое git describe использует, чтобы определить, принадлежит ли HEAD из набора коммитов, которые вы считаете не локальными изменениями .

3
ответ дан 13 December 2019 в 19:28
поделиться

git diff --quiet возвращается со статусом выхода 1, если изменения есть, и 0, если нет.

Имейте в виду, что он будет показывать разницу между инсценированными изменениями и рабочим гирляндой. Если вас интересуют изменения между HEAD и рабочим гирляндой, используйте git diff HEAD --quiet.

--quiet подразумевает --exit-code.

.
1
ответ дан 13 December 2019 в 19:28
поделиться

git-статус выходит с ненулевым статусом, если нет локальных изменений.

Но я не понимаю, что вы имеете в виду под "в сочетании с git-описанием"

.
0
ответ дан 13 December 2019 в 19:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: