Overview

Artifact ID: 5da814dd34c3fa01750f78cdd448394ba2fc87b45c21ed5b93a22dfb3afbdecb
Page Name:Stockage_Git
Date: 2021-11-27 01:38:11
Original User: bohwaz
Mimetype:text/x-markdown
Parent: 2be83e8208e2e4c3927627089e40d66b8179e4c0d99eef6c10b7374928c0413d (diff)
Content

Stockage de fichiers avec Git

Il est possible d'utiliser Git pour versionner les fichiers et documents. C'est utile pour partager les documents, mais aussi pour garder les anciennes versions en cas de mauvaises manipulation : suppression, écrasement, etc.

Dans l'exemple suivant, on suppose que l'instance de l'association est hébergée dans /home/moi/www/garradin, et que git est installé.

Exemple

Pour cela il convient de créer un nouveau repository git, par exemple dans /home/moi/documents si votre utilisateur s'appelle moi :

mkdir /home/moi/documents
cd /home/moi/documents
git init

Il faut ensuite configurer Garradin pour qu'il stocke ses fichiers dans le répertoire documents, en éditant le fichier config.local.php qui doit commencer par :

<?php

namespace Garradin;

À la suite, rajouter la configuration suivante (voir le fichier config.dist.php pour une explication détaillée de la configuration) :

const FILE_STORAGE_BACKEND = 'FileSystem';
const FILE_STORAGE_CONFIG = '/home/moi/documents';

Il faut ensuite se rendre dans l'onglet "Avancé" de la configuration pour migrer les fichiers vers ce répertoire, en cliquant sur le bouton "Copier tous les fichiers vers FileSystem".

À ce stade, les répertoires et fichiers doivent avoir été créés dans /home/moi/documents, avec des sous-répertoires comme user, web, skel, etc.

Il faut maintenant rajouter tout cela à git :

cd /home/moi/documents
git add -A
git commit -a -m "Premier commit"

git -A permet d'ajouter les fichiers et répertoires non-suivis, et git commit -a de faire un commit avec toutes les modifications, -m étant pour indiquer le contenu du message de commit. Il est possible qu'à ce stade git vous demande votre nom et adresse email.

Vous pouvez installer le plugin "Git Documents" qui va créer un commit à chaque fois qu'une modification est effectuée depuis l'interface de Garradin.

Alternativement il est possible de mettre en place un cron pour une prise en compte automatique des modifications, toutes les 5 minutes :

*/5 * * * * cd /home/moi/documents && git reset -q --merge && git add -A > /dev/null && git commit -q -a -m "Synchro"

Ainsi le repository "principal" est celui utilisé par Garradin, toutes les modifications depuis Garradin sont prises en compte. On peut maintenant partager ce répertoire.

Modifier le repository git depuis l'extérieur

Pour chaque personne intervenant sur le repository vous devez désormais leur créer un accès SSH en ajoutant leur clé SSH publique au fichier /home/moi/.ssh/authorized_keys (une clé par ligne). Voir ce guide pour générer une clé SSH.

ssh-rsa XXXX...XXXXX utilisateur@machine

Rajouter au début de la ligne, avant ssh-rsa les instructions suivantes :

no-port-forwarding,no-agent-forwarding,command="git-shell -c \"$SSH_ORIGINAL_COMMAND\"" 

Ce qui permet de contraindre l'utilisateur à ne pouvoir utiliser que git, pour des raisons de sécurité. Cela donne ainsi la ligne suivante :

no-port-forwarding,no-agent-forwarding,command="git-shell -c \"$SSH_ORIGINAL_COMMAND\"" ssh-rsa XXXX...XXXXX utilisateur@machine

L'utilisateur peut désormais se connecter à la machine en tant qu'utilisateur moi avec git et récupérer le repository :

git clone ssh://moi@serveur.association.tld/~/documents/

Et de la même manière il peut modifier les fichiers, les commiter avec git commit et les renvoyer avec git push, sans oublier de récupérer les modifications régulièrement avec git pull.

Répertoire synchronisé automatiquement

Il est également possible de synchroniser automatiquement le répertoire de l'utilisateur extérieur. Par exemple si vous avez un ordinateur dans votre association et vous voulez avoir une copie des documents disponible directement (sous-répertoire documents du repository), mais ne pas forcément donner accès aux documents des membres etc.

Dans ce cas il est conseillé de placer le repository git dans un répertoire caché, par exemple /home/bureau/.documents et faire un lien symbolique de ~/documents vers ~/documents/documents.

git clone ssh://moi@serveur.association.tld/~/documents/ ~/.documents
ln -s ~/.documents/documents ~/documents

puis de mettre en crontab un script comme celui-ci :

#!/bin/bash

cd ~/.documents

git add -A -a && git commit -a -m "Commit automatique depuis ordinateur association" > /dev/null
git pull -q && git push -q

Ainsi on a un répertoire qui est synchronisé automatiquement entre Garradin et votre ordinateur !