✅ WEB- und WordPress-Nachrichten, Themen, Plugins. Hier teilen wir Tipps und beste Website-Lösungen.

So verwenden Sie Git-Hooks, um Änderungen an einer Sperrdatei zu erkennen und eine Meldung anzuzeigen

10

Wenn wir in einem kollaborativen Team arbeiten, muss ein Entwickler von Zeit zu Zeit ein neues Paket zu einem Zweig hinzufügen, der dann mit dem Master zusammengeführt wird. Jemand ist sich dessen möglicherweise nicht bewusst und zieht einfach den Master und führt die App aus, nur um sie aufgrund des fehlenden Pakets zum Absturz zu bringen. Sehen wir uns an, wie wir Git-Hooks verwenden können, um Änderungen an a package.jsonoder a zu erkennen yarn.lockund eine Meldung anzuzeigen, die den Benutzer auffordert, die fehlenden Abhängigkeiten zu installieren.

Was sind Git-Hooks?

Git-Hooks werden ausgelöst, wenn ein Git-Ereignis eintritt, z. B. ein neues Commit, Commits in einen Online-Branch pushen, Commits ziehen, einen Branch auschecken oder einen Branch zusammenführen. Diese Prozesse enden mit 0, wenn sie richtig enden, oder mit einem anderen Wert, wenn sie falsch enden.

Wenn der eingehakte Prozess mit 0 endet, wird die Git-Aktion fortgesetzt. Andernfalls wird die Git-Aktion blockiert. Wenn Sie beispielsweise einen Pre-Commit-Git-Hook konfigurieren, um Ihren Code zu linten, führt Git diesen aus, wenn Sie eine git commit. Wenn der Lint fehlschlägt, wird der Commit nicht ausgeführt.

Git-Hooks sind in Git integriert und die Liste der Hooks ist sehr umfangreich. Beispielsweise gibt es Pre-Push, Post-Commit, Post-Checkout, Post-Merge und viele andere Git-Hooks.

Führen Sie Git-Hooks mit Husky aus

Um einige Aufgaben auszuführen, wenn die Git-Hooks ausgelöst werden, können wir das Husky-Paket für Node.js verwenden. Mit Husky können wir in einer package.jsonDatei angeben, welche Skripte ausgeführt werden sollen, wenn ein Git-Hook ausgelöst wird. Installieren Sie das Husky-Paket mit NPM:

npm i -D husky

oder Garn:

yarn add -D husky

Jetzt müssen Sie Husky für Git-Hooks initialisieren. Wenn Sie NPM verwenden:

npx husky install

und wenn Sie Garn verwenden

yarn husky install

und das war’s, Sie haben jetzt Husky installiert und konfiguriert, um Git-Hooks auszuführen. Es ist endlich Zeit, einen Haken zu definieren!

Fügen Sie einen Post-Merge-Git-Hook hinzu, um Änderungen an Sperrdateien zu überprüfen

Wir möchten einen Code ausführen, der uns benachrichtigt, wenn sich die package-lock.jsonoder yarn.lock-Dateien geändert haben. Dies geschieht normalerweise, wenn wir ziehen masterund diese Dateien geändert haben. Wir können einen Hook einrichten, der ausgeführt wird, wenn wir einen Zweig zusammenführen.

Um unsere Git-Hooks für Husky anzugeben, definieren wir sie in der package.jsonDatei. Fügen Sie dies als Schlüssel der obersten Ebene hinzu:

"husky": { "hooks": { "post-merge": "./githooks/post-merge-hook.sh" } }

Was dies besagt, ist, dass wir dieses Skript ausführen, nachdem ein Zweig zusammengeführt wurde. Wir müssen es jetzt erstellen. Erstellen Sie einen Ordner, fügen Sie eine Datei hinzu und setzen Sie ihn auf ausführbar:

mkdir githooks && cd githooks && touch post-merge-hook.sh && chmod +x post-merge-hook.sh

Wenn Sie es nicht als ausführbar festlegen, erhalten Sie einen Fehler „Permission denied”, wenn Husky versucht, diesen Git-Hook auszuführen. Bearbeiten Sie nun die Datei mit Vim oder Ihrem bevorzugten Editor und fügen Sie Folgendes ein:

changedFiles="$(git diff-tree -r --name-only --no-commit-id ORIG_HEAD HEAD)" runOnChange() { echo "$changedFiles" | grep -q "$1" && echo -e "$2" } runOnChange package-lock.json "033[35m*******************************************************************************n* 033[33mpackage-lock.json033[35m has changed. Run033[33m npm install033[35m to update your dependencies. *n*******************************************************************************" exit 0

Dadurch wird eine Nachricht in Lila mit den Wörtern package-lock.jsonund npm installin Orange gedruckt. Dieses Skript prüft, ob package-lock.jsones aktualisiert wurde, und wenn Sie stattdessen testen möchten, yarn.lockmüssen Sie einfach den Dateinamen ersetzen.

Testen Sie die Änderungsprüfung der Sperrdatei

Dies zu testen ist nicht zu komplex. Sie müssen im Grunde nur einen neuen Zweig erstellen, ein Paket installieren, damit package-lock.jsones geändert wird, es festschreiben und zum vorherigen Zweig wechseln. All das kann mit diesem Befehl erledigt werden:

git checkout -b testbranch && npm i -D lint-staged && git add. && git commit -m "test" && git checkout -

Jetzt müssen Sie es mit diesem Zweig zusammenführen

git merge testbranch

Dies löst den Post-Merge-Hook aus und führt unser Skript aus. Sie sehen dann diese Meldung in der Befehlszeile, weil die package-lock.jsonwährend der Zusammenführung geändert wurde:

Erkennen einer Sperrdateiänderung in VS Code

Dies war nur eine Verwendung. Git-Hooks können auf viele Arten verwendet werden, zum Beispiel, um das beliebte Paket Prettier auszuführen, bevor Sie etwas zum Formatieren Ihres Codes festschreiben.

Es gibt Alternativen für diesen speziellen Fall, um zu prüfen, ob package-lock.jsonaktualisiert wurde. Für VS Code gibt es beispielsweise ein raffiniertes Paket Refresh NPM Packages, das Sie auffordert, Ihre Pakete zu aktualisieren, wenn es eine Änderung erkennt. Es wird unabhängig davon ausgeführt, ob Sie Git-Hooks eingerichtet haben oder nicht. Eine weitere nette Sache ist, dass es funktioniert, wenn Sie Zweige wechseln, auch ohne einen von ihnen mit dem anderen zusammenzuführen.

So verwenden Sie Git-Hooks, um Änderungen an einer Sperrdatei zu erkennen und eine Meldung anzuzeigen

Der Vorteil dessen, was wir hier implementiert haben, ist jedoch, dass es in der Befehlszeile ausgeführt wird und nicht von einem bestimmten Code-Editor abhängt. Wenn Sie beispielsweise an einem Open-Source-Projekt arbeiten, möchten Sie vielleicht das hier Beschriebene einrichten, damit alle beteiligten Entwickler unabhängig von ihrem Setup eine gemeinsame Grundlage haben.

Aufnahmequelle: startfunction.com

Diese Website verwendet Cookies, um Ihre Erfahrung zu verbessern. Wir gehen davon aus, dass Sie damit einverstanden sind, Sie können sich jedoch abmelden, wenn Sie möchten. Annehmen Weiterlesen