gitbackup : maintenir une copie conforme (miroir) d'un dépôt git
Problématique
J'ai déjà argumenté à plusieurs reprises du risque que l'on prend à utiliser des systèmes que nous ne gérons pas nous même, comme github (ref). Cette problématique fonctionne aussi pour des dépôts maintenus par des personnes qui peuvent avoir envie de supprimer les données, bien que vous les trouviez intéressantes. Mêmes arguments pour des organisations comme framasoft ou FFDN. Ainsi, je ne peux qu'encourager à avoir son propre serveur git, pour les dépôts privés, mais aussi pour les miroirs. Le Logiciel Libre a la copie dans son génome, utilisons-le.
Principe
J'ai appris comment faire proprement un miroir d'un dépôt sur la doc de github.
# On clone le depot sur github
git clone --mirror https://github.com/exampleuser/repository-to-mirror.git
cd repository-to-mirror.git
# On ajoute comme destination chezmoi.org
git remote set-url --push origin https://git.chezmoi.org/exampleuser/mirrored
# On pousse
git push --mirror
A intervalle régulier, on peut faire
git fetch -p origin
git push --mirror
L'avantage est qu'on synchronise toutes les branches et les tags, mais on ne synchronise pas les tickets.
gitbackup
Pour tout dire, ce billet trainait dans mon dossier en préparation. J'utilisais un petit script et suite à l'article de Carl Chenet et repris sur framablog, je me suis convaincu qu'un code propre pouvait être utile à d'autre. Comme le dit Benjamin Bayart, il faut faire !. En quelques bouts de soirées, j'ai tenté de mettre les choses au propre.
Le but est d'avoir un outil proche de git d'un point de vue syntaxique pour automatiser les commandes ci-dessus. J'ai aussi gardé le même format (configparse) pour le fichier de configuration.
# On se crée un chez soi
mkdir backup_github && cd backup_github
# On initialise
gitbackup init
# On clone deux dépôts dont on veut un miroir
gitbackup clone sametmax_0bin https://github.com/sametmax/0bin.git
gitbackup clone carl_backupchecker https://github.com/backupchecker/backupchecker.git
# Quand les développeurs auront fait évolué le projet,
# on pourra synchroniser les changements
# sur un dépôt spécifique
gitbackup pull sametmax_0bin
# ou sur tous les dépôts
gitbackup pull
Le code est sur github (sinon, ce ne serait pas drôle) en GPLv3.
Sous peu, je vais ajouter une fonctionnalité pour ajouter un remote afin de pousser le miroir sur un autre site. Je vais pousser le code sur pipy, et faire un paquet pour archlinux.
C'est libre, ce code est aussi le votre. Commentaires et surtout pull requests sont les bienvenus.