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