Sobes.tech
Middle

Welche Arbeitsmuster mit Git haben Sie verwendet?

sobes.tech KI

Antwort von AI

  • Git-flow: Wird für Projekte mit einem klar definierten Release-Zyklus verwendet. Geeignet zur Verwaltung von Funktionsfixes, Fehlerbehebungen und Release-Vorbereitungen. Erstellt die Zweige feature, develop, release, hotfix, master.

  • GitHub flow: Wird bei Projekten angewendet, bei denen häufige, kleine Releases Priorität haben. Einfaches Modell, basierend auf einem Hauptzweig (main oder master) und Zweigen für jede Funktion oder Korrektur, die nach Review sofort in den Hauptzweig gemerged werden.

  • Trunk-basierte Entwicklung: Wird bei Projekten praktiziert, die eine hohe Integrations- und Continuous-Deployment-Frequenz erfordern. Entwickler nehmen Änderungen direkt am Hauptzweig (trunk) oder an kurzlebigen Zweigen vor, die schnell zurückgemerged werden. Schlüssel-Element — Feature Toggles.

Neben diesen Hauptmustern wurde verwendet:

  • Rebase vs Merge: Je nach Situation und Teamvereinbarungen wurde git rebase genutzt, um eine saubere Commit-Historie in lokalen Zweigen vor dem Merge zu bewahren, und git merge --no-ff, um eine explizite Merge-Historie im Hauptzweig zu erhalten.

    # Rebase-Beispiel
    git checkout feature/neues-feature
    git pull --rebase origin main 
    # Konflikte auflösen, falls vorhanden
    git push -f origin feature/neues-feature 
    # Oder Pull-Request für Merge in main
    
    # Merge --no-ff Beispiel
    git checkout main
    git merge --no-ff feature/neues-feature -m "Merge von feature/neues-feature in main"
    git push origin main
    
  • Squash and Merge: Wird häufig beim Zusammenführen von Feature-Branches in den Hauptzweig via Pull Request verwendet. Ermöglicht, mehrere Commits aus dem Feature-Branch in einen einzigen sauberen Commit im Hauptzweig zu konsolidieren.

    # Beispiel für Squash-Merge über die Git-Plattform (GitHub, GitLab)
    # Wird in der Regel beim Bestätigen des Pull-Requests durchgeführt.
    
  • Cherry-picking: Wird verwendet, um bestimmte Commits zwischen Zweigen zu übertragen, z.B. für Backporting von Fixes vom Hauptzweig auf den Release- oder Staging-Zweig.

    # Beispiel cherry-pick
    git checkout release/v1.2
    git cherry-pick <commit_hash>