Testen, was in einem Pre-Commit-Hook festgeschrieben werden soll

Das Internet ist absolut übersät mit falschen und nicht idealen Antworten auf diese Frage. Das ist bedauerlich, weil Sie denken würden, dass dies eine übliche Sache ist, die Sie tun möchten.

Das Problem: Wenn apre-commit Hook wird ausgeführt, das Repository ist möglicherweise nicht sauber. Wenn Sie Ihre Tests also naiv durchführen, werden sie nicht gegen das gerichtet sein, was Sie begehen, sondern gegen den Schmutz, der sich zufällig in Ihrem Arbeitsbaum befindet.

Das Offensichtliche ist zu tungit stash --keep-index --include-untracked zu Beginn despre-commit undgit pop am Ausgang. Auf diese Weise testen Sie gegen den (reinen) Index, was wir wollen.

Leider generiert dies Zusammenführungskonfliktmarkierungen, wenn Sie verwendengit add --patch, (vor allem, wenn Sie Hunks bearbeiten), da der Inhalt vonstash@{0} stimmt möglicherweise nach dem Festschreiben nicht mit dem Arbeitsbaum überein.

Eine weitere gängige Lösung besteht darin, das Repository zu klonen und die Tests in einem neuen temporären Repository auszuführen. Hier gibt es zwei Probleme: Zum einen haben wir noch kein Commit durchgeführt, sodass wir in dem Zustand, in dem wir das Commit durchführen möchten, keine Kopie des Repositorys erhalten können (ich bin sicher, dass es eine Möglichkeit gibt, dies zu tun , aber das interessiert mich da nicht :). Zweitens sind meine Tests möglicherweise abhängig vom Speicherort des aktuellen Arbeitsverzeichnisses. Zum Beispiel wegen der Konfiguration der lokalen Umgebung.

Also: Wie kann ich meinen Arbeitsbaum in dem Zustand wiederherstellen, in dem er vor dem war?git stash --keep-index --include-untracked, ohne Zusammenführungskonfliktmarkierungen einzuführen und ohne das Post-Commit zu ändernHEAD?

Antworten auf die Frage(4)

Ihre Antwort auf die Frage