Original article: Git Checkout Remote Branch Tutorial
Git est un logiciel de contrôle de versions qui permet de maintenir et de parcourir différentes versions d'une application. Dans le cas où une mise-à-jour la rend inopérante, Git permet de rétablir une version précédente.
En plus du système de versions, Git permet de travailler simultanément sur plusieurs environnements. On parle alors de branches.
À quoi servent les branches ?
À la base d'un projet sur Git, il y a un environnement principal, une branche appelée master ou main. C'est cette branche qui contient le code à déployer quand l'application est prête pour la production.
En cas de besoin, on peut effectuer des changements sur cette branche en ajoutant des contributions (commits). Dans le cas de légères modifications, cela ne pose pas de problème particulier, mais pour de plus importantes ça n'est pas idéal. C'est la raison pour laquelle on utilise d'autres branches.
Pour créer et rendre une nouvelle branche active, on utilise respectivement les commandes suivantes dans un terminal depuis le dossier du projet :
# crée une nouvelle branche
git branch ma-branche
# change l'environnement pour celui de la nouvelle branche
git checkout ma-branche
Cette nouvelle branche est celle sur laquelle ces changements peuvent être effectués. Une fois le travail terminé, on peut la fusionner sur la branche principale.
Un autre avantage des branches est qu'elles permettent à plusieurs développeurs de travailler sur le même projet en même temps. Plusieurs développeurs sur la branche principale, c'est le désastre assuré : quand des changements du même code proviennent de plusieurs sources, cela résulte généralement dans des conflits lors du fusionnement.
Avec Git, on passe sur une branche différente (c'est-à-dire sur un environnement différent) pour effectuer des changements pendant que les autres travaillent sur leurs propres branches.
Que signifie récupérer, ou checkout, une branche distante ?
Deux environnements sont créés au début d'un projet avec Git : une version locale et une version distante de la branche principale, la première sur l'ordinateur, la seconde sur la plate-forme d'hébergement intégrant Git choisie, comme GitHub dans notre exemple.
On transfère (push) les changements de la branche principale locale vers la branche principale distante, et on les récupère (pull) dans l'autre sens.
Une branche locale le reste tant qu'elle n'est pas transférée sur GitHub, dans quel cas elle devient distante, comme le montre l'exemple suivant :
# crée une nouvelle branche
git branch ma-branche
# change l'environnement pour celui de la nouvelle branche
git checkout ma-branche
# effectue un changement
touch mon-fichier.js
# inscrit la contribution
git add .
git commit -m "ajoute un nouveau fichier"
# envoie sur une nouvelle branche distante
git push --set-upstream origin ma-branche
On voit ici qu'origin ma-branche
devient la branche distante quand elle est transférée, les changements effectués et inscrits (committed).
Dans le cas où la branche distante existe déjà, on peut vouloir la récupérer ainsi que tous les changements qu'elle introduit sur notre environnement local, c'est là qu'entre en jeu git checkout
.
Récupérer les changements d'une branche distante
Un autre développeur a créé une branche distante, on veut la récupérer. Voici comment procéder :
1. Récupérer toutes les branches distantes
git fetch origin
Cette commande récupère toutes les branches distantes depuis le dépôt ciblé, ici origin
. Pour cibler le dépôt source, on peut utiliser git fetch upstream
.
2. Lister les branches disponibles
Voici la commande pour afficher la liste des branches disponibles sur lesquelles passer :
git branch -a
Les branches distantes sont précédées du préfixe remotes/origin
.
3. Récupérer les changements d'une branche distante
Comme il est impossible d'effectuer des changements directement sur une branche distante, il faut au préalable le faire sur une copie de cette branche. Voici la commande pour créer une copie de la branche corrige-echec-tests
:
git checkout -b corrige-echec-tests origin/corrige-echec-tests
Voici les étapes que cette commande produit :
- création d'une nouvelle branche locale nommée
corrige-echec-tests
- changement de l'environnement actif pour cette branche
- récupération des changements depuis la branche distante
origin/corrige-echec-tests
vers cette branche locale
En une commande, la copie de cette branche est maintenant active. Il est évidemment possible d'envoyer des contributions sur cette branche distante, de cette façon par exemple :
touch mon-fichier.js
git add .
git commit -m "ajoute un nouveau fichier"
git push
Il est aussi simple que ça d'envoyer des contributions à la branche du dépôt distant origin/corrige-echec-tests
. À noter qu'il n'y a pas eu besoin de spécifier la cible de cet envoi (il n'a pas été nécessaire d'écrire la version longue git push origin corrige-echec-tests
) : Git associe automatiquement la branche locale à la branche distante.
En conclusion
Avec Git, les branches améliorent la collaboration pendant le processus de développement d'une application.
Il devient facile pour les développeurs de travailler simultanément sur des parties différentes du code.
Le système de récupération des branches distantes permet que cette collaboration se passe sans accroc : les développeurs peuvent également les copier sur leurs systèmes, dans leurs environnements locaux, pour y effectuer des changements, puis les envoyer vers les branches distantes.