Почему `git description -dirty` добавляет суффикс` -dirty` при описании чистой проверки?

Я только что обнаружил--dirty возможностьgit describe и похоже, что он должен сделать что-то очень полезное, то есть добавить суффикс к выводуgit describe когда рабочее дерево грязное, однако в некоторых моих репозиториях это не так:

$ git status
# On branch 8.30
nothing to commit (working directory clean)
$ git describe --dirty
8.30rel-8-g9c1cbdb-dirty

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

$ git status
# On branch 1.4
nothing to commit (working directory clean)
$ git describe --tags --dirty --long
1.4rel-0-gfedfe66-dirty

Я имел обыкновение широко использоватьhg id когда я привыкиспользовать Mercurial и понравилось то, что это поведение по умолчанию было добавить+ суффикс к любому хешу коммитов, о котором сообщалось для грязного хранилища, так что ищитеgit с тех пор, ноgit describe --dirty кажется, не делает то, что я ожидал, учитывая документацию:

   --dirty[=<mark>]
       Describe the working tree. It means describe HEAD and appends
       <mark> (-dirty by default) if the working tree is dirty.

Я неправильно понимаю, что--dirty должен делать, или я не правильно его использую?

В случае, если это что-то меняет, все репозитории git развертываются черезBuckminster так что нетподмодули участвует и файловая система являетсяnfs доля.

Обновить: Я нашел обходной путь, но я абсолютно не представляю, как это может иметь значение.

Если я бегуgit diff --quiet HEAD на репо вдругgit describe работает как я ожидаю:

$ git status
# On branch 8.30
nothing to commit (working directory clean)
$ git describe --dirty
8.30rel-8-g9c1cbdb-dirty
$ git diff --quiet HEAD
$ git describe --dirty
8.30rel-8-g9c1cbdb

Я также заметил, что когдаgit describe сообщал о хранилище какdirty тогдаgitk также показывал «Локальные незафиксированные изменения, не зарегистрированные в индексе», а затем перечислял каждый файл в рабочем каталоге, но без различий с ними, только---- filename ---- линий.

Дальнейшее обновление: Поскольку это продолжало быть проблемой, я в конечном итоге написалgit-describe-dirty скрипт, который начинается с запускаgit describe --dirty но если он находит хранилище грязным, запускаетсяgit update-index -q --refresh прежде чем пытаться снова и взять второй результат.

При переборе сотен репозиториев, используяgit describe-dirty и только запуск обновления индекса для репозитория, который изначально указывает, что он грязный, экономит много времени по сравнению с запускомgit update-index -q --refresh ; git describe --dirty каждый раз.

Ответы на вопрос(2)

Ваш ответ на вопрос