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 !