GitVoici le vingt-septième volet de la formation Git. Dans mon précédent article, j’ai décrit en détail la mise en place d’une branche de suivi à distance. Maintenant que nous savons publier le travail effectué sur une branche, nous allons voir en détail comment récupérer le travail effectué par les collègues sur d’autres branches.

Va chercher !

C’est la commande git fetch qui va nous servir à récupérer les nouvelles branches avec les nouveaux commits. La particularité de la commande git fetch, c’est qu’elle permet de mettre à jour notre clone local sans pour autant perturber nos branches locales. Concrètement, la commande fait cela en effectuant une mise à jour des branches de suivi à distance. Si vous ne voyez pas trop ce que ça signifie concrètement, lisez la suite. Je vais rester fidèle à mes habitudes et illustrer tout cela avec des exemples pratiques.

AstucePourquoi utiliser git fetch si vous avez l’habitude de git pull ? D’ailleurs, est-ce que ce n’est pas un peu la même chose ? Eh non, il y a une différence fondamentale entre les deux commandes :

  • git fetch met à jour les seules branches de suivi à distance
  • git pull met à jour la branche de suivi à distance et la branche locale correspondante

Nous sommes toujours dans nos trois clones locaux rangés dans le répertorie atelier-37. Commençons par Charles :

$ cd formation-git/atelier-37/
$ ls -l
total 12
drwxrwxr-x. 3 kikinovak kikinovak 4096  7 avril 07:25 clone-de-charles
drwxrwxr-x. 3 kikinovak kikinovak 4096  7 avril 07:56 clone-de-paul
drwxrwxr-x. 3 kikinovak kikinovak 4096  7 avril 08:10 clone-de-stephane
$ cd clone-de-charles/

Nous avons vu que la commande git branch -vv nous permettait d’afficher les branches locales aussi bien que les branches distantes associées :

$ git branch -vv
  main   bf14754 [origin/main] README: ajout de Stéphane.
* voyage 8866c19 [origin/voyage] Voyage: 1ère strophe.

L’option -a (ou --all) nous permet d’afficher toutes les branches, locales et distantes :

$ git branch -a
  main
* voyage
  remotes/origin/HEAD -> origin/main
  remotes/origin/main
  remotes/origin/voyage

La commande git fetch permet de récupérer les nouveautés depuis le dépôt distant :

$ git fetch
remote: Enumerating objects: 7, done.
remote: Counting objects: 100% (7/7), done.
remote: Compressing objects: 100% (6/6), done.
remote: Total 6 (delta 1), reused 5 (delta 0), pack-reused 0
Dépaquetage des objets: 100% (6/6), 856 octets | 65.00 Kio/s, fait.
Depuis github.com:kikinovak/poesie-symboliste
 * [nouvelle branche] aurore     -> origin/aurore
 * [nouvelle branche] renouveau  -> origin/renouveau

Je vois apparaître deux nouvelles branches de suivi à distance aurore et renouveau :

$ git branch -a
  main
* voyage
  remotes/origin/HEAD -> origin/main
  remotes/origin/aurore
  remotes/origin/main
  remotes/origin/renouveau
  remotes/origin/voyage

Pour l’instant, cette opération n’a eu aucune incidence sur mes branches locales :

$ git branch -vv
  main   bf14754 [origin/main] README: ajout de Stéphane.
* voyage 8866c19 [origin/voyage] Voyage: 1ère strophe.

Le répertoire de travail de Charles ressemble toujours à ceci :

$ ls
README.md  Voyage.md

Admettons que Charles souhaite jeter un œil sur le travail de Paul dans la branche voyage. Dans ce cas, il lui suffit de basculer vers la branche que ce dernier a créée sur le dépôt distant :

$ git switch aurore 
branch 'aurore' set up to track 'origin/aurore'.
Switched to a new branch 'aurore'

Ce basculement se reflète instantanément dans l’état du répertoire de travail :

$ ls
Aurore.md  README.md

AstucePour savoir où vous en êtes avec les branches locales et distantes, l’astuce consiste à invoquer git branch en combinant les options -a et -vv comme ceci :

$ git branch -a -vv
* aurore                   44d5975 [origin/aurore] Aurore: 1ère strophe.
  main                     bf14754 [origin/main] README: ajout de Stéphane.
  voyage                   8866c19 [origin/voyage] Voyage: 1ère strophe.
  remotes/origin/HEAD      -> origin/main
  remotes/origin/aurore    44d5975 Aurore: 1ère strophe.
  remotes/origin/main      bf14754 README: ajout de Stéphane.
  remotes/origin/renouveau 45cb7ce Renouveau: 1ère strophe.
  remotes/origin/voyage    8866c19 Voyage: 1ère strophe.

De même, Charles pourra être tenté de jeter un œil sur le travail effectué par Stéphane. Là aussi, il lui suffira simplement de basculer vers la branche de suivi distante correspondante :

$ git switch renouveau 
branch 'renouveau' set up to track 'origin/renouveau'.
Switched to a new branch 'renouveau'

À présent, le répertoire de travail contient le travail de Stéphane :

$ ls
README.md  Renouveau.md

Partant de là, Charles dispose de toute une série de branches locales qui se comportent comme n’importe quelle branche qu’il aurait pu créer lui-même. Il peut les modifier, effectuer un git diff, les intégrer dans la branche main, etc.

Avant d’aller plus loin et d’effectuer des modifications, voyons comment les choses se présentent pour l’instant du côté de Paul :

$ cd ../clone-de-paul/
$ git branch -a -vv
* aurore                44d5975 [origin/aurore] Aurore: 1ère strophe.
  main                  bf14754 [origin/main] README: ajout de Stéphane.
  remotes/origin/HEAD   -> origin/main
  remotes/origin/aurore 44d5975 Aurore: 1ère strophe.
  remotes/origin/main   bf14754 README: ajout de Stéphane.

Paul aimerait bien jeter un œil sur les dernières contributions de ses deux collègues :

$ git fetch
remote: Enumerating objects: 7, done.
remote: Counting objects: 100% (7/7), done.
remote: Compressing objects: 100% (6/6), done.
remote: Total 6 (delta 1), reused 5 (delta 0), pack-reused 0
Unpacking objects: 100% (6/6), 820 bytes | 26.00 KiB/s, done.
From github.com:kikinovak/poesie-symboliste
 * [new branch]      renouveau  -> origin/renouveau
 * [new branch]      voyage     -> origin/voyage

Les deux dernières lignes l’informent de la présence de deux nouvelles branches dans le projet. Pour accéder au travail effectué sur ces deux branches, il suffit de basculer dessus :

$ ls
Aurore.md  README.md
$ git switch renouveau 
branch 'renouveau' set up to track 'origin/renouveau'.
Switched to a new branch 'renouveau'
$ ls
README.md  Renouveau.md
$ git switch voyage 
branch 'voyage' set up to track 'origin/voyage'.
Switched to a new branch 'voyage'
$ ls
README.md  Voyage.md

Dorénavant, Paul pourra gérer ces branches comme n’importe quelle branche qu’il aura créée lui-même :

$ git branch -vv
  aurore    44d5975 [origin/aurore] Aurore: 1ère strophe.
  main      bf14754 [origin/main] README: ajout de Stéphane.
  renouveau 45cb7ce [origin/renouveau] Renouveau: 1ère strophe.
* voyage    8866c19 [origin/voyage] Voyage: 1ère strophe.

Exercice

  • Connectez-vous au clone de Stéphane et faites un petit état des lieux.
  • Affichez la totalité des branches disponibles.
  • Affichez les branches locales et les branches de suivi à distance correspondantes.
  • Récupérez les dernières contributions effectuées par les collègues.
  • Jetez un œil sur le travail de Charles.
  • Faites de même avec le travail de Paul.
  • Affichez encore une fois la totalité des branches locales et distantes.

Lire la suite : Aider un collègue


La rédaction de cette documentation demande du temps et des quantités significatives de café espresso. Vous appréciez ce blog ? Offrez un café au rédacteur en cliquant sur la tasse.

 

Catégories : Formation

0 commentaire

Laisser un commentaire

Emplacement de l’avatar

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *