Wie verwalten Sie Git-Pre/Post-Commit-Hooks auf verschiedenen Plattformen (z. B. * nix und Windows)?
Irgendwelche Best Practices, die für dieses Szenario empfohlen werden?
Yuval Adam
Wie verwalten Sie Git-Pre/Post-Commit-Hooks auf verschiedenen Plattformen (z. B. * nix und Windows)?
Irgendwelche Best Practices, die für dieses Szenario empfohlen werden?
Die Git-Hooks unterscheiden sich wirklich nicht von jedem Shell-Skript, da die Best Practices, sie “plattformübergreifend” zu halten, genauso gelten. Der kleine Unterschied besteht darin, dass Sie möglicherweise auch die Windows * nix-Emulationsschichten als Hauptbenutzer dieser Hooks anvisieren, und diese können im Vergleich zu den meisten tatsächlichen Unix-Umgebungen vergleichsweise lahmgelegt werden.
Ich habe gerade einen Post-Commit-Hook auf das Standard-Git für Windows portiert (und einen Pre-Commit-Hook geschrieben), das MINGW32 verwendet. Einige der Änderungen, die ich vornehmen musste, da die vorherige Version einige Annahmen über die verfügbare Skriptumgebung gemacht hat:
readlink
verfügbar, aber es war unter Windows ohnehin wirkungslos, also habe ich einfach einen Check von gehackt which readlink
und no-oped, wenn es keine gab/dev/null
funktioniert nicht in Windows, stattdessen müssen Sie auf umleiten nul
um dies zu tun, habe ich gerade a uname -s
Überprüfen und setzen Sie eine Variable, auf die umgeleitet werden sollmktemp
verfügbar, aber da es sich um ein Verzeichnis handelte, das wir am Ende trotzdem beschnitten hatten, verwendeten wir einen naiv hartcodierten Verzeichnisnamenexec >>$out
funktioniert gut in MINGW32, aber exec 2>>$err
für STDERR nicht (es scheint still zu sterben), also mussten wir diese Umleitung leider einfach vermeidenAbgesehen davon funktionierte es so wie es ist ziemlich gut, weil es nicht viel plattformspezifisches “Zeug” darin gab. Halten Sie sich also einfach an die bewährten Methoden zum Erstellen plattformübergreifender Skripts, und das sollte Sie zu mindestens 80 % des Weges dorthin bringen. Testen Sie danach in allen verschiedenen Umgebungen, auf die Sie abzielen.
Natürlich ist es nicht erforderlich, dass ein Git-Hook ein Shell-Skript ist – tatsächlich gibt es in Perl mindestens eines im Contrib-Verzeichnis von Git.
– Kaskabel
8. März 2011 um 18:48 Uhr
@Jefromi guter Punkt, obwohl die [shell] Tag lässt mich glauben, dass er es im Shell-Skript macht, aber vielleicht weiß er nicht, dass er +1 geben muss
– Daniel DiPaolo
8. März 2011 um 19:13 Uhr