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
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: