Почему `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
каждый раз.