-
1. DĂ©marrage rapide
-
2. Les bases de Git
-
3. Les branches avec Git
-
4. Git sur le serveur
- 4.1 Protocoles
- 4.2 Installation de Git sur un serveur
- 4.3 Génération des clés publiques SSH
- 4.4 Mise en place du serveur
- 4.5 DĂ©mon (Daemon) Git
- 4.6 HTTP intelligent
- 4.7 GitWeb
- 4.8 GitLab
- 4.9 Git hébergé
- 4.10 Résumé
-
5. Git distribué
-
6. GitHub
-
7. Utilitaires Git
- 7.1 SĂ©lection des versions
- 7.2 Indexation interactive
- 7.3 Remisage et nettoyage
- 7.4 Signer votre travail
- 7.5 Recherche
- 7.6 RĂ©Ă©crire lâhistorique
- 7.7 Reset démystifié
- 7.8 Fusion avancée
- 7.9 Rerere
- 7.10 DĂ©boguer avec Git
- 7.11 Sous-modules
- 7.12 Empaquetage (bundling)
- 7.13 Replace
- 7.14 Stockage des identifiants
- 7.15 Résumé
-
8. Personnalisation de Git
- 8.1 Configuration de Git
- 8.2 Attributs Git
- 8.3 Crochets Git
- 8.4 Exemple de politique gérée par Git
- 8.5 Résumé
-
9. Git et les autres systĂšmes
- 9.1 Git comme client
- 9.2 Migration vers Git
- 9.3 Résumé
-
10. Les tripes de Git
- 10.1 Plomberie et porcelaine
- 10.2 Les objets de Git
- 10.3 Références Git
- 10.4 Fichiers groupés
- 10.5 La refspec
- 10.6 Les protocoles de transfert
- 10.7 Maintenance et récupération de données
- 10.8 Les variables dâenvironnement
- 10.9 Résumé
-
A1. Annexe A: Git dans dâautres environnements
- A1.1 Interfaces graphiques
- A1.2 Git dans Visual Studio
- A1.3 Git dans Visual Studio Code
- A1.4 Git dans IntelliJ / PyCharm / WebStorm / PhpStorm / RubyMine
- A1.5 Git dans Sublime Text
- A1.6 Git dans Bash
- A1.7 Git dans Zsh
- A1.8 Git dans PowerShell
- A1.9 Résumé
-
A2. Annexe B: Embarquer Git dans vos applications
- A2.1 Git en ligne de commande
- A2.2 Libgit2
- A2.3 JGit
- A2.4 go-git
- A2.5 Dulwich
-
A3. Commandes Git
- A3.1 Installation et configuration
- A3.2 Obtention et création des projets
- A3.3 Capture dâinstantanĂ© basique
- A3.4 Création de branches et fusion
- A3.5 Partage et mise Ă jour de projets
- A3.6 Inspection et comparaison
- A3.7 DĂ©bogage
- A3.8 Patchs
- A3.9 Courriel
- A3.10 SystĂšmes externes
- A3.11 Administration
- A3.12 Commandes de plomberie
3.5 Les branches avec Git - Branches de suivi Ă distance
Branches de suivi Ă distance
Les rĂ©fĂ©rences distantes sont des rĂ©fĂ©rences (pointeurs) vers les Ă©lĂ©ments de votre dĂ©pĂŽt distant tels que les branches, les tags, etcâŠâ
Vous pouvez obtenir la liste complÚte de ces références distantes avec la commande git ls-remote (remote)
, ou git remote show (remote)
.
NĂ©anmoins, une maniĂšre plus courante consiste Ă tirer parti des branches de suivi Ă distance.
Les branches de suivi Ă distance sont des rĂ©fĂ©rences (des pointeurs) vers lâĂ©tat des branches sur votre dĂ©pĂŽt distant. Ce sont des branches locales quâon ne peut pas modifier ; elles sont modifiĂ©es automatiquement pour vous lors de communications rĂ©seau. Les branches de suivi Ă distance agissent comme des marques-pages pour vous indiquer lâĂ©tat des branches sur votre dĂ©pĂŽt distant lors de votre derniĂšre connexion.
Elles prennent la forme de (distant)/(branche)
.
Par exemple, si vous souhaitiez visualiser lâĂ©tat de votre branche master
sur le dépÎt distant origin
lors de votre derniÚre communication, il vous suffirait de vérifier la branche origin/master
.
Si vous Ă©tiez en train de travailler avec un collĂšgue et quâil avait publiĂ© la branche iss53
, vous pourriez avoir votre propre branche iss53
 ; mais la branche sur le serveur pointerait sur le commit de origin/iss53
.
Cela peut ĂȘtre un peu dĂ©concertant, essayons dâĂ©claircir les choses par un exemple.
Supposons que vous avez un serveur Git sur le rĂ©seau Ă lâadresse git.notresociete.com
.
Si vous clonez Ă partir de ce serveur, la commande clone
de Git le nomme automatiquement origin
, tire tout son historique, crĂ©e un pointeur sur lâĂ©tat actuel de la branche master
et lâappelle localement origin/master
.
Git crée également votre propre branche master
qui dĂ©marre au mĂȘme endroit que la branche master
dâorigine, pour que vous puissiez commencer Ă travailler.
Note
|
origin nâest pas spĂ©cialDe la mĂȘme maniĂšre que le nom de branche |
Si vous travaillez sur votre branche locale master
et que dans le mĂȘme temps, quelquâun publie sur git.notresociete.com
et met Ă jour cette mĂȘme branche master
, alors vos deux historiques divergent.
Tant que vous restez sans contact avec votre serveur distant, votre pointeur vers origin/master
nâavance pas.
Lancez la commande git fetch <distant>
pour synchroniser vos travaux (dans notre cas, git fetch origin
).
Cette commande recherche le serveur hébergeant origin
(dans notre cas, git.notresociete.com
), y récupÚre toutes les nouvelles données et met à jour votre base de donnée locale en déplaçant votre pointeur origin/master
vers une nouvelle position, plus Ă jour.
git fetch
met Ă jour vos branches de suivi Ă distancePour dĂ©montrer lâusage de multiples serveurs distants et le fonctionnement des branches de suivi Ă distance pour ces projets distants, supposons que vous avez un autre serveur Git interne qui nâest utilisĂ© que par une Ă©quipe de dĂ©veloppeurs.
Ce serveur se trouve sur git.equipe1.notresociete.com
.
Vous pouvez lâajouter aux rĂ©fĂ©rences distantes de votre projet en lançant la commande git remote add
comme nous lâavons dĂ©crit au chapitre Les bases de Git.
Nommez ce serveur distant equipeun
qui sera le raccourci pour lâURL complĂšte.
Maintenant, vous pouvez lancer git fetch equipeun
pour rĂ©cupĂ©rer lâensemble des informations du serveur distant equipeun
que vous ne possédez pas.
Comme ce serveur contient déjà un sous-ensemble des données du serveur origin
, Git ne récupÚre aucune donnée mais initialise une branche de suivi à distance appelée equipeun/master
qui pointe sur le mĂȘme commit que celui vers lequel pointe la branche master
de equipeun
.
equipeun/master
Pousser les branches
Lorsque vous souhaitez partager une branche avec le reste du monde, vous devez la pousser sur un serveur distant sur lequel vous avez accĂšs en Ă©criture. Vos branches locales ne sont pas automatiquement synchronisĂ©es sur les serveurs distants â vous devez pousser explicitement les branches que vous souhaitez partager. De cette maniĂšre, vous pouvez utiliser des branches privĂ©es pour le travail que vous ne souhaitez pas partager et ne pousser que les branches sur lesquelles vous souhaitez collaborer.
Si vous possédez une branche nommée correctionserveur
sur laquelle vous souhaitez travailler avec dâautres, vous pouvez la pousser de la mĂȘme maniĂšre que vous avez poussĂ© votre premiĂšre branche.
Lancez git push (serveur distant) (branche)
 :
$ git push origin correctionserveur
Counting objects: 24, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (15/15), done.
Writing objects: 100% (24/24), 1.91 KiB | 0 bytes/s, done.
Total 24 (delta 2), reused 0 (delta 0)
To https://github.com/schacon/simplegit
* [new branch] correctionserveur -> correctionserveur
Il sâagit en quelque sorte dâun raccourci.
Git développe automatiquement le nom de branche correctionserveur
en refs/heads/correctionserveur:refs/heads/correctionserveur
, ce qui signifie "Prendre ma branche locale correctionserveur
et la pousser pour mettre Ă jour la branche distante correctionserveur`".
Nous traiterons plus en détail la partie `refs/heads/
au chapitre Les tripes de Git mais gĂ©nĂ©ralement, vous pouvez lâoublier.
Vous pouvez aussi lancer git push origin correctionserveur:correctionserveur
, qui rĂ©alise la mĂȘme chose â ce qui signifie « Prendre ma branche correctionserveur
et en faire la branche correctionserveur
distante ».
Vous pouvez utiliser ce format pour pousser une branche locale vers une branche distante nommée différemment.
Si vous ne souhaitez pas lâappeler correctionserveur
sur le serveur distant, vous pouvez lancer Ă la place git push origin correctionserveur:branchegeniale
pour pousser votre branche locale correctionserveur
sur la branche branchegeniale
sur le dépÎt distant.
Note
|
Ne renseignez pas votre mot de passe Ă chaque fois
Si vous utilisez une URL en HTTPS, le serveur Git vous demandera votre nom dâutilisateur et votre mot de passe pour vous authentifier. Par dĂ©faut, vous devez entrer ces informations sur votre terminal et le serveur pourra alors dĂ©terminer si vous ĂȘtre autorisĂ© Ă pousser. Si vous ne voulez pas entrer ces informations Ă chaque fois que vous poussez, vous pouvez mettre en place un "cache dâidentification" (credential cache).
Son fonctionnement le plus simple consiste Ă garder ces informations en mĂ©moire pour quelques minutes mais vous pouvez configurer ce dĂ©lai en lançant la commande Pour davantage dâinformations sur les diffĂ©rentes options de cache dâidentification disponibles, vous pouvez vous rĂ©fĂ©rer au chapitre Stockage des identifiants. |
La prochaine fois quâun de vos collĂšgues rĂ©cupĂšre les donnĂ©es depuis le serveur, il rĂ©cupĂ©rera, au sein de la branche de suivi Ă distance origin/correctionserveur
, une rĂ©fĂ©rence vers lâĂ©tat de la branche correctionserveur
sur le serveur :
$ git fetch origin
remote: Counting objects: 7, done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 3 (delta 0), reused 3 (delta 0)
Unpacking objects: 100% (3/3), done.
From https://github.com/schacon/simplegit
* [new branch] correctionserveur -> origin/correctionserveur
Il est important de noter que lorsque vous récupérez une nouvelle branche depuis un serveur distant, vous ne créez pas automatiquement une copie locale éditable.
En dâautres termes, il nây a pas de branche correctionserveur
, seulement un pointeur sur la branche origin/correctionserveur
qui nâest pas modifiable.
Pour fusionner ce travail dans votre branche de travail actuelle, vous pouvez lancer la commande git merge origin/correctionserveur
.
Si vous souhaitez créer votre propre branche correctionserveur
pour pouvoir y travailler, vous pouvez faire quâelle repose sur le pointeur distant :
$ git checkout -b correctionserveur origin/correctionserveur
Branch correctionserveur set up to track remote branch correctionserveur from origin.
Switched to a new branch 'correctionserveur'
Cette commande vous fournit une branche locale modifiable basĂ©e sur lâĂ©tat actuel de origin/correctionserveur
.
Suivre les branches
Lâextraction dâune branche locale Ă partir dâune branche distante crĂ©e automatiquement ce quâon appelle une "branche de suivi" (tracking branch) et la branche quâelle suit est appelĂ©e "branche amont" (upstream branch).
Les branches de suivi sont des branches locales qui sont en relation directe avec une branche distante.
Si vous vous trouvez sur une branche de suivi et que vous tapez git push
, Git sélectionne automatiquement le serveur vers lequel pousser vos modifications.
De mĂȘme, un git pull
sur une de ces branches récupÚre toutes les références distantes et fusionne automatiquement la branche distante correspondante dans la branche actuelle.
Lorsque vous clonez un dépÎt, il crée généralement automatiquement une branche master
qui suit origin/master
.
Câest pourquoi les commandes git push
et git pull
fonctionnent directement sans autre configuration.
Vous pouvez nĂ©anmoins crĂ©er dâautres branches de suivi si vous le souhaitez, qui suivront des branches sur dâautres dĂ©pĂŽts distants ou ne suivront pas la branche master
.
Un cas dâutilisation simple est lâexemple prĂ©cĂ©dent, en lançant git checkout -b [branche] [nomdistant]/[branche]
.
Câest une opĂ©ration suffisamment courante pour que Git propose lâoption abrĂ©gĂ©e --track
 :
$ git checkout --track origin/correctionserveur
Branch correctionserveur set up to track remote branch correctionserveur from origin.
Switched to a new branch 'correctionserveur'
En fait, câest tellement habituel quâil y a mĂȘme un raccourci de ce racccouci. Si le nom de branche que vous essayez dâextraire (a) nâexiste pas et (b) correspond Ă un seul nom sur un seul distant, Git va crĂ©er une branche de suivi pour vous :
$ git checkout correctionserveur
Branch serverfix set up to track remote branch correctionserveur from origin.
Switched to a new branch 'correctionserveur'
Pour créer une branche locale avec un nom différent de celui de la branche distante, vous pouvez simplement utiliser la premiÚre version avec un nom différent de branche locale :
$ git checkout -b cs origin/correctionserveur
Branch cs set up to track remote branch correctionserveur from origin.
Switched to a new branch 'cs'
à présent, votre branche locale cs
poussera vers et tirera automatiquement depuis origin/correctionserveur
.
Si vous avez dĂ©jĂ une branche locale et que vous voulez lâassocier Ă une branche distante que vous venez de rĂ©cupĂ©rer ou que vous voulez changer la branche distante que vous suivez, vous pouvez ajouter lâoption -u
ou --set-upstream-to
Ă la commande git branch
Ă tout moment.
$ git branch -u origin/correctionserveur
Branch correctionserveur set up to track remote branch correctionserveur from origin.
Note
|
Raccourci vers upstream
Quand vous avez une branche de suivi configurée, vous pouvez faire référence à sa branche amont grùce au raccourci |
Si vous voulez voir quelles branches de suivi vous avez configurĂ©es, vous pouvez passer lâoption -vv
Ă git branch
.
Celle-ci va lister lâensemble de vos branches locales avec quelques informations supplĂ©mentaires, y compris quelle est la branche suivie et si votre branche locale est devant, derriĂšre ou les deux Ă la fois.
$ git branch -vv
iss53 7e424c3 [origin/iss53: ahead 2] forgot the brackets
master 1ae2a45 [origin/master] deploying index fix
* correctionserveur f8674d9 [equipe1/correction-serveur-ok: ahead 3, behind 1] this should do it
test 5ea463a trying something new
Vous pouvez constater ici que votre branche iss53
suit origin/iss53
et est "devant de deux", ce qui signifie quâil existe deux commits locaux qui nâont pas Ă©tĂ© poussĂ©s au serveur.
On peut aussi voir que la branche master
suit origin/master
et est Ă jour.
On peut voir ensuite que notre branche correctionserveur
suit la branche correction-serveur-ok
sur notre serveur equipe1
et est "devant de trois" et "derriĂšre de un", ce qui signifie quâil existe un commit qui nâa pas Ă©tĂ© encore intĂ©grĂ© localement et trois commits locaux qui nâont pas Ă©tĂ© poussĂ©s.
Finalement, on peut voir que notre branche test
ne suit aucune branche distante.
Il est important de noter que ces nombres se basent uniquement sur lâĂ©tat de votre branche distante la derniĂšre fois quâelle a Ă©tĂ© synchronisĂ©e depuis le serveur. Cette commande nâeffectue aucune recherche sur les serveurs et ne travaille que sur les donnĂ©es locales qui ont Ă©tĂ© mises en cache depuis ces serveurs. Si vous voulez mettre complĂštement Ă jour ces nombres, vous devez prĂ©alablement synchroniser (fetch) toutes vos branches distantes depuis les serveurs. Vous pouvez le faire de cette façon :
$ git fetch --all; git branch -vv
Tirer une branche (Pulling)
Bien que la commande git fetch
rĂ©cupĂšre lâensemble des changements prĂ©sents sur serveur et qui nâont pas dĂ©jĂ Ă©tĂ© rapatriĂ©s localement, elle ne modifie en rien votre rĂ©pertoire de travail.
Cette commande rĂ©cupĂšre simplement les donnĂ©es pour vous et vous laisse les fusionner par vous-mĂȘme.
Cependant, il existe une commande appelée git pull
qui consiste essentiellement en un git fetch
immédiatement suivi par un git merge
dans la plupart des cas.
Si vous disposez dâune branche de suivi configurĂ©e comme illustrĂ© dans le chapitre prĂ©cĂ©dent, soit par une configuration explicite soit en ayant laissĂ© les commandes clone
ou checkout
les créer pour vous, git pull
va examiner quel serveur et quelle branche votre branche courante suit actuellement, synchroniser depuis ce serveur et ensuite essayer de fusionner cette branche distante avec la vĂŽtre.
Il est généralement préférable de simplement utiliser les commandes fetch
et merge
explicitement plutĂŽt que de laisser faire la magie de git pull
qui peut sâavĂ©rer source de confusion.
Suppression de branches distantes
Supposons que vous en avez terminĂ© avec une branche distante â disons que vous et vos collaborateurs avez terminĂ© une fonctionnalitĂ© et lâavez fusionnĂ©e dans la branche master
du serveur distant (ou la branche correspondant Ă votre code stable).
Vous pouvez effacer une branche distante en ajoutant lâoption --delete
Ă git push
.
Si vous souhaitez effacer votre branche correctionserveur
du serveur, vous pouvez lancer ceci :
$ git push origin --delete correctionserveur
To https://github.com/schacon/simplegit
- [deleted] correctionserveur
En rĂ©sumĂ©, cela ne fait que supprimer le pointeur sur le serveur. Le serveur Git garde gĂ©nĂ©ralement les donnĂ©es pour un temps jusquâĂ ce quâun processus de nettoyage (garbage collection) passe. De cette maniĂšre, si une suppression accidentelle a eu lieu, les donnĂ©es sont souvent trĂšs facilement rĂ©cupĂ©rables.