Тестирование того, что должно быть зафиксировано в хуке предварительной фиксации
Интернет абсолютно завален неправильными и неидеальными ответами на этот вопрос. Это прискорбно, потому что вы думаете, что это обычное дело, которое вы хотели бы сделать.
Проблема: когдаpre-commit
Хук работает, хранилище может быть не чистым. Так что, если вы будете наивно запускать свои тесты, они не будут против того, что выповторяю, но какая бы ни была грязь в вашем рабочем дереве.
Очевидная вещь, которую нужно сделать, этоgit stash --keep-index --include-untracked
в началеpre-commit
а такжеgit pop
на выходе. Таким образом, вы тестируете по (чистому) индексу, чего мы и хотим.
К сожалению, это генерирует маркеры конфликта слияния, если вы используетеgit add --patch
(особенно если вы редактируете фрагменты), так как содержимоеstash@{0}
может не совпадать с рабочим деревом после коммита.
Другое распространенное решение - клонировать репозиторий и запустить тесты в новом временном. Есть две проблемы с этим: во-первых, у нас нетпока не совершил, поэтому мы можемЛегко получить копию хранилища в том состоянии, в котором мысобирается совершить (яЯ уверен, что есть способ сделать это, но яЯ не заинтересован, потому что :). Во-вторых, мои тесты могут быть чувствительны к местоположению текущего рабочего каталога. Например, из-за локальной конфигурации среды.
Итак: Как я могу восстановить свое рабочее дерево до того состояния, в котором оно находилось доgit stash --keep-index --include-untracked
, без введения маркеров конфликта слияния и без изменения post-commit?HEAD