Wie man Git-Hooks testet

Lesezeit: 3 Minuten

Da “Testen” eine häufige Verwendung für einen Git-Hook ist, ist meine Frage schwer zu suchen.

Ich schreibe einen ziemlich komplizierten Git-Post-Receive-Hook und möchte wissen, wie man ihn am besten testet. Derzeit ist mein Prozess:

  • Änderungen nach dem Empfang in einem Dummy-Remote-Repo vornehmen
  • Nehmen Sie eine Änderung an einem lokalen Dummy-Repo vor
  • Commit-Änderung im Dummy-Local-Repo
  • Push-Wechsel zum Dummy-Remote-Repo

Gibt es eine einfachere Möglichkeit, dies zu testen? Im Idealfall sähe es so aus:

  • nehmen Sie Änderungen vor, um sie in einem Dummy-Repo nach dem Empfang zu erhalten
  • Geben Sie den “magischen” Befehl aus, um den Post-Empfang zu testen

Vielleicht kann ich einen vorherigen Push “neu ausgeben” oder das Remote-Repo so tun lassen, als ob es gerade einen Push mit einem bestimmten Hash erhalten hätte?

Schreiben Sie einen Hook, der nur seine Argumente/Umgebung aufzeichnet und diese in eine Datei ausgibt. Dann können Sie den echten Hook einfach nach Belieben mit derselben Umgebung/den gleichen Argumenten erneut aufrufen, und es wird sich so verhalten, als ob Sie gerade genau denselben Push erneut ausgegeben hätten.

  • Das ist ungefähr das, was ich getan habe, aber stattdessen indem ich die relevanten Variablen manuell inspiziert (echo).

    – Fehler

    17. Juli 2012 um 0:25 Uhr

  • wie würde so ein “dumper” haken aussehen?

    – Jon Watson

    11. November 2015 um 22:28 Uhr

  • @ JonWatson, ich habe gerade verwendet echo $@;echo; pwd; echo; set

    – Lukas

    28. Januar 2016 um 17:41 Uhr


  • Dies mag für einige offensichtlich sein, aber stellen Sie sicher, dass Ihr Hook-Skript dies ist ausführbar! Ich habe meine in einem Texteditor erstellt, anstatt die .sample-Datei zu kopieren, und sie wurde nicht ausgeführt.

    – Mcg256

    10. Januar 2019 um 0:13 Uhr

Benutzer-Avatar
BMW

Beantworten Sie diese vier Jahre alte Frage.

Wenn Sie den Hook testen möchten, müssen Sie ihn zuerst in der lokalen Umgebung testen. Ich gebe die detaillierten Befehle zum Nachverfolgen, verwenden post-receive als Probe:

$ mkdir /tmp/hook_test
$ cd /tmp/hook_test

# set local git repo, where you put hooks in it.
$ git clone --bare https://github.com/git/git.git

# set develop environment which is cloned from the new created repo. 
$ git clone git.git repo 
    
# copy and rename the hook you need test to "post-receive"
$ cd git.git/hooks
$ cp ~/post-receive-test post-receive

# suppose the hook script is bash script.
# edit "post-receive" and add "set -x" to second line in it to active debug

$ cd /tmp/hook_test/repo
# emulate a hook trigger, do some changes, "git add" and "git commit" it 

$ git push
 
# Now you should see the script "post-receive" runs automatically with debug details.

Du solltest frei laufen können git pushdass die Updates nur in das lokale Repo gepusht werden /tmp/hook_test/git.git

Mein Ansatz besteht darin, den HEAD am Remote-Repo einen Commit zurück zu wählen und dann erneut zu pushen:

ssh <repo> 'cd /<repo_path>; git update-ref refs/heads/master HEAD^' && git push origin master

  • Perfekt, genau das, was ich brauchte.

    – robrecord

    9. Januar 2019 um 16:50 Uhr

Zum Debuggen könnten Sie Ihren Hook auch so beenden:

echo "No errors found."
exit 1

Wenn Sie mit Ihrem Haken zufrieden sind, nehmen Sie natürlich die letzte Leine wieder heraus.

1271270cookie-checkWie man Git-Hooks testet

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy