Как я могу проверить в сценарии, если локальные изменения присутствуют? Возможно, в сочетании с git describe
?
Вам нужно будет убедиться, что соблюдаются оба следующих свойства:
Отсутствие различий между HEAD и индексным кешем
git diff-index --cached HEAD
Что нет различий между индексом и рабочим деревом:
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 из набора коммитов, которые вы считаете не локальными изменениями .
git diff --quiet
возвращается со статусом выхода 1, если изменения есть, и 0, если нет.
Имейте в виду, что он будет показывать разницу между инсценированными изменениями и рабочим гирляндой.
Если вас интересуют изменения между HEAD и рабочим гирляндой, используйте git diff HEAD --quiet
.
--quiet
подразумевает --exit-code
.
git-статус
выходит с ненулевым статусом, если нет локальных изменений.
Но я не понимаю, что вы имеете в виду под "в сочетании с git-описанием"
.