paint-brush
So automatisieren Sie Git-Workflows mit Git-Hooks 🚀von@smy
Neue Geschichte

So automatisieren Sie Git-Workflows mit Git-Hooks 🚀

von Syed Muhammad Yaseen4m2024/07/30
Read on Terminal Reader

Zu lang; Lesen

Git-Hooks sind Skripte, die automatisch ausgeführt werden, wenn ein bestimmtes Ereignis in einem Git-Repository eintritt. Sie ermöglichen Ihnen, das interne Verhalten von Git anzupassen und an wichtigen Punkten im Entwicklungszyklus anpassbare Aktionen auszulösen. Wenn Sie beispielsweise Lint-Prüfungen ausführen möchten, bevor Dateien festgeschrieben werden, verwenden wir den Pre-Commit-Hook.
featured image - So automatisieren Sie Git-Workflows mit Git-Hooks 🚀
Syed Muhammad Yaseen HackerNoon profile picture
0-item
1-item

Hallooooooooo!


Hoffe, es geht dir gut! Hier ist SMY! 👋 Lass uns direkt loslegen 🚀


....

Ich habe einen Beispiel-Commit-Msg-Hook eingerichtet, der bei jedem Commit


↳ prüft die Namenskonvention für Filialen, d. h. [Typ]/ABC-[Ticketnummer]-[Ziel]


↳ prüft die Commit-Msg-Konvention, d. h. [ABC-Ticketnummer] [Typ]: Ziel


↳ prüft auf Lints, Prettier und führt Unit-Tests aus


Gist-Link: https://gist.github.com/smyaseen/17083d60d02a07b2a3122410e2d39b6f

.....

Inhalt:

  • Wait What?
  • But Why?
  • But How?

1️⃣ Was -


↳ Git-Hooks sind Skripte, die automatisch ausgeführt werden, wenn ein bestimmtes Ereignis in einem Git-Repository auftritt.


↳ Sie ermöglichen Ihnen, das interne Verhalten von Git anzupassen und an wichtigen Punkten im Entwicklungslebenszyklus anpassbare Aktionen auszulösen.


↳ Es gibt lokale Hooks und serverseitige Hooks.

↳ Lokale Hooks werden auf Ihrem Computer und serverseitig im Remote-Repository ausgeführt.


lokale Hooks:


↳ Vor dem Commit ↳ Vorbereitungs-Commit-Nachricht ↳ Commit-Nachricht ↳ Nach dem Commit ↳ Nach dem Auschecken ↳ Vor dem Rebase


Server-Hooks:


↳ vor dem Empfang ↳ aktualisieren ↳ nach dem Empfang


2️⃣ Warum -


↳ Sie möchten beispielsweise Lint-Prüfungen ausführen, bevor Dateien festgeschrieben werden. Daher verwenden wir den Pre-Commit-Hook.


↳ Ein weiteres Beispiel: Sie möchten den Standard-Branch-Namen und die Commit-Msg-Konvention erzwingen, also verwenden wir den Commit-Msg-Hook.


↳ und vieles mehr...


3️⃣ Wie -


↳ Für eine einfache Einrichtung installieren Sie in einem JavaScript-Projekt eine Bibliothek namens Husky und folgen Sie der Dokumentation

https://www.npmjs.com/package/husky


↳ Ein Beispiel: Ich möchte Branch-Namen und Commit-Nachrichtenkonventionen erzwingen sowie Lint, Prettier und Tests ausführen.


↳ Wir können mehrere Hooks verwenden. In meinem Fall werde ich einen Commit-Msg-Hook hinzufügen. Der Grund, warum ich mich nicht für Pre-Commit entschieden habe, ist, dass es nicht nach Commit-Msg sucht, da es vor dem Commit ausgeführt wird. Ich möchte nicht, dass ein Entwickler Prüfungen durchführt und bei der Commit-Nachricht fehlschlägt, das Problem behebt und alles erneut ausführt. Ich möchte zuerst nach der Commit-Nachricht suchen.


↳ Erstellen Sie einen Commit-Msg-Hook gemäß der Dokumentation von Husky und fügen Sie das folgende Beispiel ein:


 #!/usr/bin/env sh . "$(dirname -- "$0")/_/husky.sh" # Checks for branch name currentBranch=$(git rev-parse --abbrev-ref HEAD) requiredPattern="^(build|chore|feat|docs|refactor|perf|test)/ABC-\d+-.+$" if ! echo "$currentBranch" | grep -qE $requiredPattern; then echo "\nInvalid branch name: $currentBranch" echo "-" echo "Should follow this pattern: build|chore|feat|docs|refactor|perf|test/ABC-ticketnumber-any-text" echo "-" echo "example: docs/ABC-123-update-readme.md" echo "-" echo "Refer to this for convention:" echo "-" echo "build : Changes related to building the code (eg adding npm dependencies or external libraries)." echo "-" echo "chore: Changes that do not affect the external user (eg updating the .gitignore file or .prettierrc file)." echo "-" echo "feat: A new feature." echo "-" echo "fix: A bug fix." echo "-" echo "docs: Documentation a related changes." echo "-" echo "refactor: A code that neither fix bug nor adds a feature." echo "-" echo "perf: A code that improves performance style: A code that is related to styling." echo "-" echo "test: Adding new test or making changes to existing test" echo "-\n" exit 1 # Branch name doesn't match the pattern, exit with error code fi # Checks for commit message commit_message="$(cat "$1")" pattern='^\[ABC-[0-9]+\] (build|chore|feat|docs|refactor|perf|test): .+$' if [[ ! $commit_message =~ $pattern ]]; then echo "\nInvalid commit message: $commit_message" echo "-" echo "Should follow this pattern: [ABC-ticketnumber] build|chore|feat|docs|refactor|perf|test: objective" echo "-" echo "example: [ABC-15] chore: updated .gitignore" echo "-" echo "Refer to this for convention:" echo "-" echo "build : Changes related to building the code (eg adding npm dependencies or external libraries)." echo "-" echo "chore: Changes that do not affect the external user (eg updating the .gitignore file or .prettierrc file)." echo "-" echo "feat: A new feature." echo "-" echo "fix: A bug fix." echo "-" echo "docs: Documentation a related changes." echo "-" echo "refactor: A code that neither fix bug nor adds a feature." echo "-" echo "perf: A code that improves performance style: A code that is related to styling." echo "-" echo "test: Adding new test or making changes to existing test" echo "-\n" exit 1 fi # npx lint-staged -- uncomment when have lint setted up # npm run test -- uncomment when have test setted up


↳ Wenn Sie jetzt einen Commit durchführen, wird die Namenskonvention für Branch und Commit geprüft und es werden Lint-Checks ausgeführt. Abschließend werden Tests ausgeführt, nachdem alles andere bereit ist.

4️⃣ Ergebnis -

✨ Konsistenz.

✨ Standardisierung.

✨ Denken Sie nicht an Belanglosigkeiten.

✨ Automatisieren und auf Wirkung konzentrieren.


Einpacken:


Wir haben gerade Ihren Entwicklungsworkflow mit Git Hooks verbessert. 🚀


.....


Jetzt können Sie Ihren Entwicklungsworkflow optimieren 🚀


Das war's, Leute! Ich hoffe, es war eine interessante Lektüre für euch. Danke! ✨


👉 Folge mir auf GitHub & LinkedIn