Les possibilités de partage de git sont assez mal connues. La plupart des utilisateurs clonent un dépôt initial et ne font ensuite que communiquer avec cette unique source.
Pourtant git est distribué par nature et rien ne nous contraint à être aussi centralisé.
Nous allons voir ici comment facilement ouvrir un serveur git à partir de votre dépôt local pour partager votre travail avec votre voisin de bureau.
Partager rapidement son clone local
Le serveur principal d'un projet est le moyen le plus courant de partager ses modifications. Cela permet de publier son travail en cours (sur des branches secondaires) et d'officialiser l'état courant du projet (sur la branche principale).
Cependant lors des phases de développement il est assez courant de vouloir partager simplement du code de façon informelle avec d'autres développeurs et créer une branche sur le dépôt du projet n'est pas toujours souhaitable. Pour facilement partager votre dépôt avec votre voisin nous allons utiliser la commande git daemon.
Tout d'abord nous allons nous créer un alias simple pour partager le dépôt git courant
git config --global alias.woof '!git daemon --export-all --base-path=. --verbose'
Nous venons de créer un nouvel alias git. Il suffit maintenant de se placer dans notre dépôt et de lancer la commande
git woof
Et nous avons un serveur git en lecture seul capable de servir le dépôt courant.
Pour partager en lecture/écriture il suffit d'utiliser la commande suivante
git woof --enable=receive-pack
Attention toutefois, git ne fait aucun contrôle d'accès. Cette configuration ne doit être utilisée que sur un LAN.
Une fois que l'accès distant n'est plus utile il suffit de tuer le serveur avec ctrl-c
Récupérer le dépôt distant
Maintenant que le dépôt git est partagé, voyons ce que doit faire notre voisin de bureau pour le récupérer.
Pour cloner le dépot, la commande clone habituelle fonctionne
git clone git://<adresse ip>/ <nom>
notez le / après l'adresse IP. Notez également qu'il faut généralement fournir un nom. Sans nom git clonera dans un sous répertoire créé en utilisant l'adresse IP.
Attention, par défaut git clone vas vous créer une référence au dépôt distant à partir duquel vous clonez. Ici ce dépôt est temporaire, pensez à le supprimer ou à le modifier après la création du clone...
Cloner n'est pas le cas le plus courant. Votre voisin travaille sans doute déjà sur le même projet que vous et veut sans doute seulement récupérer vos modifications. Les commandes ls-remote, fetch, pull, et (si vous l'avez activé) push fonctionnent également.
Tout d'abord la commande
git ls-remote git://<adresse ip>/
vous donnera la liste des branches et tags disponibles sur le dépôt distant.
La commande
git fetch -n git://<adresse ip>/ <branche>
vous permettra de récupérer tous les commits de la branche distante dans votre dépôt. Git marquera la pointe des nouveaux commits avec la référence FETCH_HEAD. L'option -n évite de créer accidentellement des tags qui n'existeraient pas localement.
vous pouvez ensuite utiliser
git checkout FETCH_HEAD
pour vous placer sur cette référence et (si nécessaire) y créer une branche.