Testando o que está prestes a ser confirmado em um gancho de pré-commit

A internet está absolutamente cheia de respostas incorretas e não ideais para essa questão. Isso é lamentável, porque você pensaria que isso seria uma coisa comum que você gostaria de fazer.

O problema: quando umpre-commit hook é executado, o repositório pode não estar limpo. Então, se você ingenuamente executar seus testes, eles não serão contra o que você está cometendo, mas qualquer que seja a sujeira na sua árvore de trabalho.

A coisa óbvia a fazer égit stash --keep-index --include-untracked no início dopre-commit egit pop na saída. Dessa forma você está testando contra o índice (puro), que é o que queremos.

Infelizmente, isso gera marcadores de conflito de mesclagem se você usargit add --patch, (especialmente se você editar pedaços), desde o conteúdo destash@{0} pode não corresponder à árvore de trabalho após o commit.

Outra solução comum é clonar o repositório e executar os testes em um novo temporário. Há dois problemas com isso: um é que ainda não estamos comprometidos, então não podemos obter facilmente uma cópia do repositório no estado que estamos prestes a cometer (tenho certeza de que há uma maneira de fazer isso , mas eu não estou interessado porque :). Em segundo lugar, meus testes podem ser sensíveis à localização do diretório de trabalho atual. Por exemplo, por causa da configuração do ambiente local.

Então, como posso restaurar a minha árvore de trabalho para qualquer estado em que estava antes dagit stash --keep-index --include-untracked, sem introduzir marcadores de conflito de mesclagem e sem modificar o post-commitHEAD?

questionAnswers(4)

yourAnswerToTheQuestion