Voici le vingt-sixième volet de la formation Git. Dans mon précédent article, 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 :
$ git branch * main $ git switch -c voyage Switched to a new branch 'voyage'
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 :
$ git add Voyage.md $ git commit -m "Voyage: 1ère strophe."
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
main
est liée à la branche distanteorigin/main
. - La branche locale
voyage
est 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 :
$ git add Aurore.md $ git commit -m "Aurore: 1ère strophe."
Il publie cette première ébauche en créant la branche de suivi à distance correspondante :
$ git push -u origin aurore
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.
Exercice
- Connectez-vous au clone de Stéphane et faites un petit état des lieux.
- Créez une branche
renouveau
basée sur la branche main. - Éditez un fichier
Renouveau.md
avec 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.
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.
Lire la suite : Récupérer une branche distante
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.
0 commentaire