Scénarios de fusion complexes

Git avancé

Amanda Crawford-Adamo

Software and Data Engineer

Dépôt du pipeline de données de vols

Un graphe du dépôt du pipeline de données de vols et de son arborescence. Le répertoire de travail git contient 4 fichiers : etl.py, load.py, transform.py et ingest.py. Le répertoire data contient le dossier flight_data.csv. Le dossier .git est aussi affiché.

Git avancé

Fusion « squash » avec Git

$$

Fonctionnement

  • Crée un seul nouveau commit sur la branche cible
  • Combine tous les changements de la branche source
    • Ajoute un commit régulier avec un seul parent (contrairement à la stratégie récursive)
  • Ajouté à la branche cible (pas à la branche de fonctionnalité)
    • Ne conserve pas l'historique détaillé des commits de la branche source

$$

Avantages

  • Historique propre et linéaire
  • Simplifie la revue de code pour de grosses fonctionnalités
  • Plus facile de revenir sur toute la fonctionnalité
Git avancé

Exemple de fusion squash

La branche data-cleanup diverge de main après le deuxième commit. La branche main a un commit de plus. La branche data-cleanup a deux commits de plus.

Git avancé

Processus de fusion squash

  1. Passez à la branche main

    $ git checkout main
    
  2. Créez un commit « squash » de tous les changements de data-cleanup

    $ git merge --squash data-cleanup
    
  3. Validez le commit « squash » dans l'historique de main

    $ git commit -m "Implement and optimize data cleanup"
    
Git avancé

Résultat de la fusion squash

Un graphe montrant deux branches : main et data-cleanup. Main a quatre commits. La branche de fonctionnalité diverge après le dernier commit de main avec un commit additionnel. Le dernier commit de main est un commit à parent unique qui contient l'écrasement des commits additionnels de data-cleanup.

Git avancé

Fusion « octopus » avec Git

$$

Fonctionnement

  • Fusionne trois branches ou plus à la fois
  • Crée un seul commit de fusion avec plusieurs parents
  • À privilégier lorsque les branches n'entrent pas en conflit

$$

Avantages

  • Utile pour intégrer plusieurs fonctionnalités indépendantes simultanément
  • Sert à synchroniser plusieurs branches de publication pour différentes versions d'un projet
Git avancé

Exemple de fusion octopus

Illustration de quatre branches de développement : main, ingestion, transform et load. Les branches ingestion, transform et load divergent de main après le premier commit, chacune avec un commit additionnel. La branche main a aussi un commit additionnel.

Git avancé

Commandes de fusion octopus

Commande de fusion octopus Git

git merge -s octopus

Exemple

$ git merge -s octopus ingest transform load
Trying simple merge with ingest
Trying simple merge with transform
Trying simple merge with load
Merge made by the 'octopus' strategy.
...
Git avancé

Résultat de la fusion octopus

Illustration de quatre branches de développement : main, ingestion, transform et load. Les branches ingestion, transform et load divergent de main après le premier commit, chacune avec un commit additionnel. La branche main a cinq commits qui intègrent ceux des autres branches. Le dernier commit de fusion a quatre parents : le précédent commit de main, et le dernier commit des branches ingest, transform et load.

Git avancé

Résumé

Fusion squash

  • Simplifie l'historique, combine plusieurs commits en un seul
  • À utiliser pour un historique propre et simplifié
    git merge --squash <source_branch>
    

Fusion octopus

  • Préserve la structure des branches
  • Fusionne plusieurs branches simultanément
  • Intègre efficacement plusieurs développements parallèles
    git merge -s octopus <branch 1> <branch 2> <branch 3>
    
Git avancé

Passons à la pratique !

Git avancé

Preparing Video For Download...