# Git/Synchroniser le dépôt local avec le dépôt distant

* Principes
* Apprendre à travailler avec Git
** Avant de commencer : installation et configuration de Git
** Création de votre dépôt local
** Visualiser le contenu de votre dépôt local
** Premiers pas
** Gestion des branches
** Synchroniser le dépôt local avec le dépôt distant
* Fonctionnalités avancées
** Étiquetage (tags)
** Remise (stash)
** Recombinaison (rebase)
** Sous-modules et Super-projets
** Structure interne
** Pull-request
* Recettes
** Exclure des fichiers du dépôt
** Écrire des messages de commit
* Environnement
** Intégration dans les IDEs
** Améliorer sa productivité en configurant Git
** Git sous Linux
** Git sous Windows
** Forges
*** GitLab
*** GitHub
*** Bitbucket
* Git et Subversion (svn)
** Passer de Subversion à Git
** Travailler avec Git local et un dépôt Subversion distant
** Participer au développement de Wikimédia (Gerrit)
* Problèmes connus
* Ressources externes
* Principes
* Apprendre à travailler avec Git
** Avant de commencer : installation et configuration de Git
** Création de votre dépôt local
** Visualiser le contenu de votre dépôt local
** Premiers pas
** Gestion des branches
** Synchroniser le dépôt local avec le dépôt distant
* Fonctionnalités avancées
** Étiquetage (tags)
** Remise (stash)
** Recombinaison (rebase)
** Sous-modules et Super-projets
** Structure interne
** Pull-request
* Recettes
** Exclure des fichiers du dépôt
** Écrire des messages de commit
* Environnement
** Intégration dans les IDEs
** Améliorer sa productivité en configurant Git
** Git sous Linux
** Git sous Windows
** Forges
*** GitLab
*** GitHub
*** Bitbucket
* Git et Subversion (svn)
** Passer de Subversion à Git
** Travailler avec Git local et un dépôt Subversion distant
** Participer au développement de Wikimédia (Gerrit)
* Problèmes connus
* Ressources externes
[ Modifier le sommaire ]
Dans le chapitre précédent, nous avons vu comment vous pouviez travailler seul dans votre dépôt local. Nous allons maintenant nous pencher sur l'aspect distribué de git et voir comment travailler de façon collaborative en communiquant avec d'autres dépôts. Nous allons voir comment publier vos modifications et recevoir les modifications des autres développeurs.

## Simulons un environnement de travail distribué

Nous allons faire travailler ensemble deux personnages, dont la réputation n'est plus à faire, Alice et Bob. Nous allons supposer que Alice et Bob vont chacun créer leur dépôt local sur leur machine avec git clone. Bien évidemment, ils vont utiliser clone en indiquant l'adresse du dépôt principal du projet : http://, https://, git:// ou file:////.
Pour créer un dépôt HTTP(s), il faut qu'il soit lisible par un serveur web (ex : Apache).

### Créons un faux dépôt distant pour nos tests

Il serait prématuré d'expliquer ici comment créer un dépôt sur le réseau. Aussi, pour travailler, nous allons créer un faux dépôt distant en local.
Placez-vous dans un dossier qui ne risque rien (par exemple /tmp), nous allons créer le faux dépôt distant.
Les fichiers d'un dépôt --bare sont cryptés dans le sous-répertoire objects, ils ne sont donc pas accessibles par d'autres programmes que Git.

### Simulons deux utilisateurs utilisant le dépôt distant

Le faux dépôt distant est créé. Maintenant, Alice et Bob vont créer leur copie locale avec clone.

### Alice commence à travailler

En tant qu'Alice, créons quelques modifications.
Alice a maintenant quelques modifications dans son dépôt local, nous allons voir comment elle peut échanger avec Bob.

## Commencer à travailler avec un dépôt distant

Dès que vous voulez faire une opération qui concerne le dépôt distant (publication ou récupération d'informations), commencez toujours par
Cela met à jour les informations sur les dépôts distants auxquels est rattaché votre dépôt local, si vous oubliez de le faire, vous risquez d'être faussé par le fait que l'historique des modifications que vous voyez (par exemple) n'est pas complet.
Ainsi, dès que vous voulez faire une opération qui implique le dépôt distant, souvenez-vous de toujours faire un git fetch.

## Publier les modifications locales sur le dépôt distant

Alice a fait plusieurs modifications sur master, elle voudrait les partager avec Bob, elle doit donc publier ses derniers commits sur le dépôt distant.
Git nous indique que la branche master a été créée sur le dépôt distant.

## Récupérer les modifications d'un dépôt distant

Voyons comment Bob peut récupérer le travail d'Alice.
Git nous indique qu'une nouvelle branche a été créée sur le dépôt distant. On va essayer de la récupérer.
On a bien récupéré les modifications faites par Alice. Si vous ouvrez le fichier mon_nouveau_fichier.txt, vous retrouverez toutes les modifications d'Alice.
À notre tour, faisons une modification :
Le résultat de ce git log ne devrait pas vous surprendre. Néanmoins, cette sortie ne montre pas l'état du dépôt distant. Pour cela, nous allons utiliser l'option --decorate.
Là, on voit bien que notre branche master locale (master) est en avance de un commit sur la branche master distante (origin/master). HEAD indique simplement le commit sur lequel nous nous trouvons. Cela est confirmé par git status :
Publions nos modifications comme git nous le propose :
On retourne chez Alice :
La copie d'Alice semble à jour. Mais où est passé la modification de Bob ? Nous avons oublié le git fetch !
Cette fois-ci, git nous indique que nous sommes en retard de 1 commit, en effet nous n'avons pas récupéré les modifications de Bob. Voyons ce que donne git log. Cette fois-ci, nous allons utiliser l'option --all pour indiquer à git que nous voulons voir toutes les branches, c'est à dire que nous voulons voir origin/master et pas seulement master.
On voit bien notre retard sur le commit de Bob puisque origin/master est plus haut que master. Demandons à git de récupérer les modifications distantes et de les fusionner avec notre master local.
Et ainsi de suite. Chacun peut localement faire plusieurs commits et faire régulièrement git push (« pousser » en anglais) pour publier ses propres modifications et des pull (« tirer » en anglais) pour récupérer les modifications des autres.

## Continuer

Vous maîtrisez maintenant l'essentiel de git pour pouvoir travailler collaborativement sur un projet.
Évidemment, dans notre exemple, nous avons utilisé un faux dépôt distant. Dans la réalité, il faudra créer un dépôt central (régulièrement sauvegardé pour ne pas perdre le projet !) sur une machine réseau pour que tout le monde puisse faire le clone.