Les branches de suivi à distance
Dans le précédent atelier pratique, j'ai illustré quelques principes de base du travail en équipe. Aujourd'hui nous allons continuer dans cette lancée et aborder un outil crucial lorsqu'on travaille à plusieurs sur un projet : les branches de suivi à distance (remote tracking branches).
Ça vous branche ?
Nous allons nous servir des trois clones de l'atelier pratique précédent et continuer là-dessus :
$ cd formation-git/atelier-37/
$ ls -l
total 12
drwxrwxr-x. 3 kikinovak kikinovak 4096 Apr 6 16:16 clone-de-charles
drwxrwxr-x. 3 kikinovak kikinovak 4096 Apr 6 16:16 clone-de-paul
drwxrwxr-x. 3 kikinovak kikinovak 4096 Apr 6 16:06 clone-de-stephane
$ cd clone-de-charles/
Dans l'état actuel des choses, il y a eu quatre commits sur la branche
main, en comptant le commit initial effectué automatiquement lors de la
création du projet.
Charles compte travailler sur un poème intitulé Le Voyage. Pour commencer, il
va créer une branche voyage et basculer dessus :
Il édite un fichier Voyage.md comme ceci :
# Le Voyage
*Charles Baudelaire*
Pour l'enfant, amoureux de cartes et d'estampes,
L'univers est égal à son vaste appétit.
Ah ! que le monde est grand à la clarté des lampes !
Aux yeux du souvenir que le monde est petit !
Il ajoute ce fichier à l'index et effectue un commit :
S'il essaie de publier ce premier jet à ce stade, Git va lui afficher le message d'erreur suivant :
$ git push
fatal: The current branch voyage has no upstream branch.
To push the current branch and set the remote as upstream, use
git push --set-upstream origin voyage
Essayons de comprendre ce que Git nous dit ici. Le problème, c'est que la
branche locale voyage n'a pas de branche de suivi à distance (upstream
branch) correspondante.
Rappelez-vous que ce n'est pas le genre de Git de faire les choses à notre place. En revanche, ses suggestions sont toujours bonnes à prendre. Concrètement, Git nous fournit explicitement la commande pour créer la branche de suivi à distance requise :
$ git push --set-upstream origin voyage
Enumerating objects: 4, done.
Counting objects: 100% (4/4), done.
Delta compression using up to 8 threads
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 463 bytes | 463.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
remote:
remote: Create a pull request for 'voyage' on GitHub by visiting:
remote: https://github.com/kikinovak/poesie-symboliste/pull/new/voyage
remote:
To github.com:kikinovak/poesie-symboliste.git
* [new branch] voyage -> voyage
branch 'voyage' set up to track 'origin/voyage'.
Nous avons déjà eu l'occasion de faire cette manipulation dans l'atelier
pratique sur les pull requests. Cette fois-ci, nous n'allons pas utiliser
GitHub pour intégrer la branche voyage dans la branche d'intégration main.
Au lieu de cela, nous allons la laisser en l'état. Voyons où en sont les
choses :
$ git branch -vv
main bf14754 [origin/main] README: ajout de Stéphane.
* voyage 8866c19 [origin/voyage] Voyage: 1ère strophe.
Dorénavant, chacune de nos deux branches locales dispose de sa branche de suivi à distance (remote tracking branch) correspondante :
-
La branche locale
mainest liée à la branche distanteorigin/main. -
La branche locale
voyageest liée à la branche distanteorigin/voyage.
Notez qu'à partir de là, Git se souvient de la branche distante qu'il faudra utiliser en fonction de la branche locale sur laquelle vous vous trouvez.
C'est au tour de Paul d'ajouter sa pierre à l'édifice. Il commence à travailler sur un poème intitulé Aurore, dans une branche dédiée :
$ cd ../clone-de-paul/
$ git status
On branch main
Your branch is up to date with 'origin/main'.
...
$ git branch
* main
$ git switch -c aurore
Switched to a new branch 'aurore'
Il édite un fichier Aurore.md comme ceci :
# Aurore
*Paul Valéry*
La confusion morose
Qui me servait de sommeil,
Se dissipe dès la rose
Apparence du soleil.
Dans mon âme je m'avance,
Tout ailé de confiance :
C'est la première oraison !
À peine sorti des sables,
Je fais des pas admirables
Dans les pas de ma raison.
Il ajoute le fichier à l'index et effectue un commit :
Il publie cette première ébauche en créant la branche de suivi à distance correspondante :
Adoptez l'option courte -u
Notez en passant que l'option courte -u peut très bien remplacer l'option
longue --set-upstream.
Là aussi, chacune des deux branches locales dispose de sa branche de suivi à distance correspondante :
$ git branch -vv
* aurore 44d5975 [origin/aurore] Aurore: 1ère strophe.
main bf14754 [origin/main] README: ajout de Stéphane.
Et maintenant ?
Nous venons de voir comment il fallait s'y prendre pour pousser (git
push) le travail effectué sur une branche locale vers une branche distante
correspondante. Il nous reste à savoir comment récupérer toutes ces
branches publiées par les collaborateurs. Vous serez peut-être surpris
d'apprendre que ce n'est pas la commande git pull qui vous sera le
plus utile.
À vous de jouer !
-
Connectez-vous au clone de Stéphane et faites un petit état des lieux.
-
Créez une branche
renouveaubasée sur la branchemain. -
Éditez un fichier
Renouveau.mdavec le texte ci-dessous. -
Ajoutez le fichier à l'index et effectuez un commit avec un message approprié.
-
Publiez ce premier jet en créant une branche de suivi à distance qui va bien.
-
Affichez vos branches locales et distantes.
# Renouveau
*Stéphane Mallarmé*
Le printemps maladif a chassé tristement
L'hiver, saison de l'art serein, l'hiver lucide,
Et, dans mon être à qui le sang morne préside
L'impuissance s'étire en un long bâillement.
La rédaction de cette documentation demande du temps et des quantités significatives de café espresso. Vous appréciez ce site ? Offrez un café au rédacteur en cliquant sur la tasse.

