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

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

Проблема: когдаpre-commit Хук работает, хранилище может быть не чистым. Поэтому, если вы будете наивно запускать свои тесты, они будут не против того, что вы делаете, а за то, что грязь окажется в вашем рабочем дереве.

Очевидная вещь, которую нужно сделать, этоgit stash --keep-index --include-untracked в началеpre-commit а такжеgit pop на выходе. Таким образом, вы тестируете по (чистому) индексу, чего мы и хотим.

К сожалению, это генерирует маркеры конфликта слияния, если вы используетеgit add --patch(особенно если вы редактируете фрагменты), так как содержимоеstash@{0} может не совпадать с рабочим деревом после коммита.

Другое распространенное решение - клонировать репозиторий и запустить тесты в новом временном. С этим есть две проблемы: во-первых, мы еще не зафиксировали, поэтому мы не можем легко получить копию хранилища в состоянии, которое мы собираемся зафиксировать (я уверен, что есть способ сделать это но мне это не интересно, потому что :). Во-вторых, мои тесты могут быть чувствительны к местоположению текущего рабочего каталога. Например, из-за локальной конфигурации среды.

Итак: Как я могу восстановить свое рабочее дерево до того состояния, в котором оно находилось доgit stash --keep-index --include-untrackedбез введения маркеров конфликта слияния и без изменения пост-фиксацииHEAD?

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

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