Plattformübergreifende Git-Hooks

Lesezeit: 2 Minuten

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

  • nein 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
  • Weiterleitung zu /dev/null funktioniert nicht in Windows, stattdessen müssen Sie auf umleiten nulum dies zu tun, habe ich gerade a uname -s Überprüfen und setzen Sie eine Variable, auf die umgeleitet werden soll
  • nein mktemp verfügbar, aber da es sich um ein Verzeichnis handelte, das wir am Ende trotzdem beschnitten hatten, verwendeten wir einen naiv hartcodierten Verzeichnisnamen
  • Aus irgendeinem Grund Umleitung von STDOUT über exec >>$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 vermeiden

Abgesehen 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

1137410cookie-checkPlattformübergreifende Git-Hooks

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

Privacy policy