Utiliser git sur un serveur de fichiers

Utiliser git sur un serveur de fichiers

Commiter et versionner ses sources localement, c’est bien, mais les pusher sur un serveur externe, c’est mieux, ne serait-ce que pour le backup.

Et comme je ne publie pas tout sur github, je me suis intéressé à la solution de push sur un serveur de fichiers local, c’est-à-dire sur un NAS ou ce bon vieil e-smith (enfin SME server).

Création du repository

Création repository bare

Avec git, vous pouvez donner le chemin pour cloner votre répertoire de travail, et permettre aux autres développeurs d’y commiter et créer des branches.

Toutefois, l’idéal, pour travailler à plusieurs sur le même projet, est de créer une version dite bare du repository.

Il s’agit en fait des fichiers contenus dans le dossier .git d’un repository standard, sans les fichiers modifiables.
En clair, c’est un dépôt git dans lequel on ne peut pas travailler.

Pour créer ce repository bare, il suffit de cloner le dossier de travail, avec le paramètre --bare. Ainsi, dans le dossier parent du projet :

git clone --bare my_project my_project.git

Une convention veut que le nom de dossier d’un repository bare finisse par .git.

Déplacement sur le serveur de fichiers

Vous pouvez maintenant déplacer le repository bare (celui dont le nom se termine par .git donc) dans un dossier partagé sur le serveur de fichiers, où vous le souhaitez.

C’est tout.

Utilisation du nouveau dépôt

Déclarer le repository partagé à celui d’origine

Le dépôt d’origine, cloné pour créer le bare, est par définition déjà synchronisé, mais il est toutefois nécessaire de lui indiquer où se trouve le dépôt commun.

Dans le dépôt d’origine :

git remote add my_server //server/share/folder/my_project.git

A partir de là, après avoir commité les modifications dans le dossier de travail, vous pourrez en plus les pusher sur le serveur pour mettre les sources en commun.

Cloner le repository partagé

Les autres développeurs peuvent également récupérer les sources depuis le partage de fichiers, en clonant le repository :

git clone //server/share/folder/my_project.git

Ici, j’utilise le chemin au format UNC, pour éviter de créer un lecteur réseau pour mon partage qui ne contient que des dépôts bare.

Bonus : accès en lecture seule par HTTPS

A partir de là, les développeurs qui on accès au serveur de partage de fichiers peuvent cloner les repository et travailler dessus.

Si le dossier partagé est aussi accessible en HTTPS (ou en HTTP si vous le souhaitez vraiment), les développeurs peuvent également cloner les sources, avec une petite manipulation d’un fichier hook.

Notez toutefois que cet accès par HTTPS est en lecture seule, alors il ne peut être utilisé que dans certains cas.

Préparation

Pour activer l’accès Web d’un repository, il suffit de renommer le fichier post-update.sample qui se trouve dans hooks, en post-update.

Ce renommage a pour effet de démarrer la commande git update-server-info après chaque push.

Ainsi, le repository pourra être cloné en HTTPS après le prochain push, ou si vous démarrer git update-server-info manuellement.

Récupérer les sources par HTTPS

Maintenant, vous pouvez cloner le dossier par son adresse Web :

git clone https://server/folder/my_project.git

Si le certificat de votre serveur Web est auto signé, vous pouvez désactiver sa vérification avec cette commande :

git -c http.sslVerify=false clone https://server/folder/my_project.git

Le mot de la fin

Et vous voilà en possession d’un dépôt git privé (ou plusieurs) accessible en lecture et en écriture depuis votre réseau, et en lecture depuis le Web.

Et tout ça sur votre vieux serveur de fichiers. Elle est pas belle la vie ?

L'illustration de cet article est une image sous licence Domaine public par Daiima

Cet article vous a été utile ? Partage it !

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Si vous le souhaitez, renseignez le champ 'Nom' de cette façon : 'VotreNom@VotreMotClef' pour obtenir une ancre optimisée pour les moteurs de recherche.