Тестирование того, что должно быть зафиксировано в хуке предварительной фиксации

Интернет абсолютно завален неправильными и неидеальными ответами на этот вопрос. Это прискорбно, потому что вы думаете, что это обычное дело, которое вы хотели бы сделать.

Проблема: когда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

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

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