Utiliser Git comme outil de sauvegarde et d’infonuagique ?

Git est une forge, c’est-à-dire un outil collaboratif qui permet à des développeuses (ou des développeurs) de travailler sur un projet commun et de le versionner. Ce système, doté de nombreux outils annexes, est très pratique car il permet d’isoler facilement les bugs et de les traiter. Git garde la trace de toutes les modifications. On peut utiliser Git pour développer un logiciel ou pour écrire un roman. Si vous modifiez un chapitre et que trois semaines plus tard, vous avez des regrets, pas de problème! Vous pouvez retrouver la version et ressusciter un personnage qu’entretemps vous avez assassiné pour les besoins de l’intrigue.

En ce qui me concerne, depuis quelques semaines, je l’utilise aussi pour sauvegarder mon répertoire personnel (Documents, Images, etc…). Bien sûr, le dépôt est privé. J’adore Git et je ne vois que des avantages à avoir tout mon répertoire en accès libre partout où je me trouve, pourvu que j’aie une connexion internet. La sauvegarde versionnée est également très intéressante. Cette forge offre en sus, une multitude d’outils très utiles tels que le wiki, les snippets et bien sûr les « issues ». Je n’ai jamais trouvé mon bonheur chez Nextcloud et autres logiciels d’infonuagique. À mon avis, dans ce domaine, Git est ce qui se rapproche le plus de la perfection… ou plutôt de mes attentes.

J’ai écrit un petit script de mise à jour automatisée qui tourne en tâche de fond, au démarrage de l’ordinateur. J’eus préféré qu’il s’exécutât avant l’extinction mais je ne sais pas comment m’y prendre. Voici le script:

#!/bin/bash

# Mise à jour de ma sauvegarde sur git 
cd ~/sauvegarde
git add . 
jour_heure=`date`
git commit -m "Mise à jour du $jour_heure" 
git push -u origin master

# Mise à jour des paquets
tilix -e "sudo pacman -Syu" &

Vous noterez qu’il met également à jour les paquets, mais ce n’est pas l’objet de cet article. Si une modification a été apportée, je le vois tout de suite grâce à la date et à l’heure précises ou elle a été poussée dans le dépôt. C’est très pratique.

Cela dit, je me pose des questions sur l’usage que j’en fait. D’abord au niveau de la sécurité du dépôt. Dans mon répertoire personnel, je n’ai pas de documents classés « secret défense » dérobés lors de mon service militaire et transmis à nos amis les Russes contre une bouteille de vodka par semaine jusqu’à ma mort. Je n’ai pas non plus de mode opératoire pour fabriquer une bombe avec un carburateur de Peugeot 103 relié à une Raspberry Pi. Mais tout de même, ce sont des documents personnels et j’aurais aimé avoir une estimation du niveau de protection de mes données, comparé par exemple à Nextcloud.

Deuxième point qui me turlubite, Git est un outil à vocation collaborative. Il est conçu pour permettre à au moins deux personnes de travailler ensemble. Or, il est difficile de collaborer avec soi-même tout seul! Par conséquent, je n’utilise pas Git de manière réglementaire. Il n’y a rien de collaboratif dans mon dépôt. Ce n’est pas illégal, mais est-ce que c’est moral? Ne suis-je pas en train d’accaparer égoïstement des ressources qui me sont offertes gratuitement et qui seraient utilisées de manière plus judicieuse par des développeuses pour programmer un hackiciel transformant les balles des fusils d’assaut en d’inoffensives pâquerettes? Pour me donner bonne conscience, je me dis que Git est un outil libre et qu’à ce titre, je suis libre de l’utiliser comme bon me semble, mais ça ne répond pas à mes interrogations.

Dans un paragraphe précédent, j’ai écrit que Git est ce qui se rapproche le plus de la perfection. Il y a tout de même quelques menus inconvénients: Primo, mon répertoire personnel ne peut pas contenir un sous-dépôt git. Lorsque ce cas se présente, je ne peux pas le pousser sur mon dépôt de sauvegarde. Secundo, à la création du dépôt, il n’est pas possible de pousser tout son répertoire d’un coup. Une telle action provoque une interruption de la connexion au dépôt distant. Il faut y aller par petites touches, ce qui peut prendre du temps. Ensuite par contre, il n’y a pas de problème pour pousser les mises à jour. Voici un script qui permet d’automatiser le dépôt initial de ses répertoires et fichiers:

#!/bin/bash

# Nom du script: add_images.sh
# Auteur: Benoît
# Fonction: dépôt automatisé de plusieurs répertoires
# Argument $1: Répertoire d'origine

cd ~/sauvegarde
for var_1 in `ls ~/$1`
do
    mkdir ~/sauvegarde/$1/$var_1
    for var_2 in `ls ~/$1/$var_1`
        do 
            mv ~/$1/$var_1/$var_2 ~/sauvegarde/$1/$var_1
            git add ~/sauvegarde/$1/$var_1/$var_2
            git commit -m "Ajout $var_1"
            git push -u origin master
        done
    rm -r ~/$1/$var_1
done

En conclusion, je dirais que la solution de sauvegarder mon répertoire personnel sur une forge est celle qui me convient le mieux car je ne suis pas quelqu’un qui conserve des documents devenus inutiles ou obsolètes. Je balance beaucoup et j’ai donc un volume de données personnelles réduit. Je ne suis pas persuadé que cette méthode convienne à tout le monde. Mais en tout cas, Git me permet d’avoir un outil de sauvegarde performant et d’avoir aussi mon propre nuage. Le problème est que je détourne la forge de son usage initial.

15 commentaires sur « Utiliser Git comme outil de sauvegarde et d’infonuagique ? »

  1. Pour ma part, je ne vois que des avantages à utiliser git ET un outil de backup. Ce ne sont pas des outils réalisés dans la même optique du tout. Perso, pour les sauvegardes j’utilise rdiff-backup. Donc, bien sûr, tu peux utiliser un tournevis pour clouter mais est-ce un conseil judicieux ?

    Aimé par 1 personne

    1. Je suis en train de chercher une autre solution. J’ai testé Borg et git annex mais ça ne répond pas vraiment à mes attentes. Merci pour ton commentaire.

      J'aime

  2. Bonsoir,

    J’ai du mal à comprendre cet article, donc certaines remarques seront peut-être en partie inexactes.

    – Git n’est pas une forge à mon sens. C’est uniquement un système de gestion de versions (un des éléments constituant une forge logicielle). Vu l’image illustrant l’article, et les détails dans le second paragraphe, je suppose que tu décris de GitLab en parlant de forge.
    – Il est bien entendu possible de réaliser des sauvegardes avec Git (d’ailleurs, Bup est un logiciel de sauvegarde basé sur Git), mais cela pose plusieurs problèmes pour moi, dont l’impossibilité de supprimer d’anciens commits (sauf si on crée régulièrement de nouvelles branches partant de zéro). Ça donne une sauvegarde dont la taille totale ne fera qu’augmenter au cours du temps.
    – Mettre la date dans le message de commit n’a que peu d’intérêt, puisque chaque commit contient déjà la date de sa création dans ses métadonnées.
    – Utiliser Git en solo ne me pose pas de problème, je le fais d’ailleurs sur beaucoup de projets. Je ne vois pas en quoi ce serait s’accaparer des ressources, puisque cette utilisation n’impacte en rien les autres utilisateurs. De plus, collaborer avec soi-même peut simplement correspondre à utiliser ce dépôt sur au moins deux ordinateurs différents 🙂
    – Utiliser des « sous-dépôts » est possible (« git submodule », ou « git subtree »), mais ne correspond pas à l’usage qui en est fait ici, et ce ne serait pas gérable de parcourir ces sous-dépôts pour les intégrer dans une sauvegarde globale. Comme Git n’est pas prévu pour cette utilisation, rencontrer ce genre de problème ne me choque pas (et je doute qu’il soit facile de le résoudre).
    – Pour l’impossibilité de pousser tout le répertoire d’un coup, je pense que c’est un problème du coté de la stabilité ou de la vitesse de connexion (par exemple, une durée trop longue qui mène à la coupure de la connexion).

    Je pense que l’idée est de combiner deux besoins en un seul outil : Rendre des documents disponibles simplement et réaliser des sauvegardes de ces mêmes documents. À mon avis, ces deux besoins sont assez différents, et je ne connais pas d’outil prévu pour réaliser les deux de manière convenable.
    Tout comme Yoho, je pense qu’il serait préférable d’utiliser deux outils : Un pour « partager » les documents (NextCloud, SyncThing, Seafile…) et un autre pour réaliser des sauvegardes (Borg, Restic, Burp…).

    J'aime

    1. Bonsoir

      Merci pour ton long commentaire. Le titre de l’article se termine par un point d’interrogation, ce qui veut dire que je ne suis pas trop sûr de moi. Je suis donc heureux d’avoir des réactions qui m’éclairent sur la pertinence ou la non-pertinence de mon choix.

      • Malgré mes recherches et ton explication, j’ai encore du mal à bien saisir ce qu’est une forge logicielle.
      • Pour ce qui est de la date, je trouve quand-même que c’est pratique de l’avoir directement dans le message de commit. Mais bon, ça reste un détail.
      • Quand je parle d’accaparer des ressources, j’exagère un peu. L’article est volontairement léger. C’est mon style. Mais tout de même, je ne l’utilise pas de manière conventionnelle et je me pose des questions.
      • Pour l’impossiblité de pousser tout le répertoire, tu as sans doute raison. La connexion coupait quand ça durait trop longtemps. En tout cas, je n’ai rien trouvé sur une éventuelle taille maximum de données que l’utilisateur est autorisé à pousser.
      • Je ne pense pas que mon utilisation de Git soit généralisable. Pour moi, c’est OK parce que j’aime bien Git et que j’ai un petit volume de données personnelles mais ce n’est sans doute pas le cas de tout le monde.

      J'aime

      1. > j’ai encore du mal à bien saisir ce qu’est une forge logicielle.

        Une forge logicielle est un espace sur Internet (ou dans un Intranet) qui va centraliser le dépôt des sources d’un logiciel (histoire que tout le monde sache où aller chercher la dernière version) et apporter des fonctionnalités supplémentaires telles que :
        – système de tickets
        – système de gestion de contribution (merge requests)
        – wiki
        – publication de releases
        – etc.

        Bref, une forge concentre plein d’outils en plus d’héberger un dépôt de sources (que ce soit géré avec git, SVN, bazaar… la techno importe peu) afin de faciliter le travail collaboratif. Il sert aussi, pour les projets non collaboratifs, de sauvegarde.

        Sincèrement, ton utilisation de Git est mauvaise. Ce n’est pas un outil de sauvegarde, il n’est pas fait pour ça. Lorsque tu modifies un document, Git va enregistrer le document complet, pas juste la différence, ce qui fait vite des dépôts git très lourd.

        De plus, comme dit dans les commentaires, tu ne peux pas supprimer tes anciens fichiers du dépôt git. Enfin, si, c’est possible, mais au prix de manipulations vraiment pas évidentes : https://docs.gitlab.com/ee/user/project/repository/reducing_the_repo_size_using_git.html.
        Sur Framagit, on supprime (avec un délai d’avertissement quand même, on n’est pas des sauvages) les dépôts git qui servent de sauvegardes et qui sont trop gros.

        Je te conseille plutôt un vrai outil de sauvegarde comme Borg, couplé à Borgmatic pour que ce soit plus simple de s’en servir :
        – ne pousse que les modifications
        – fait de la déduplication (https://fr.wikipedia.org/wiki/Déduplication)
        – compresse les données
        – fait de la rotation dans les sauvegardes (les sauvegardes plus vieilles que X temps sont supprimées pour faire de la place)
        – peut chiffrer les sauvegardes
        – est super rapide

        J'aime

      2. Bonjour,

        Merci pour ton commentaire qui a le mérite d’être clair et qui répond à ma question concernant l’accaparement des ressources:

        Sur Framagit, on supprime (avec un délai d’avertissement quand même, on n’est pas des sauvages) les dépôts git qui servent de sauvegardes et qui sont trop gros.

        Je vais donc regarder de plus près Borg et Borgmatic et je compléterai mon article, ou bien j’en ferai un autre 🙂

        J'aime

  3. Pour ma part j’ai abandonné devant la difficulté à exclure certains fichiers et dossiers:
    De souvenir, j’ai pas réussi à dépasser ce problème:
    Vu que je ne veux pas versionner tout mon /home et avoir la liste de tous les fichiers non-suivi à chaque `git status`, je mets un .gitignore à `*` et je sélectionne manuellement les dossiers que je veux suivre

    Sauf que je me retrouvais à devoir ‘whitelister’ tous les dossiers et sous-dossiers un par un comme ça:
    « `
    !projets/
    !projets/*
    !projets/futur/
    !projets/futur/*
    !projets/futur/proche/
    !projets/futur/proche/*
    « `
    Du coup je suis parti sur un versionnage local automatique avec BackInTime-qt et du `rsync` pour le distant. Comment tu fais, tu versionnes tout tout tout ton /home?

    Autre question qui me vient, est-ce que Git conserve bien toutes les métadonnées de tes fichiers (les permissions notamment) ?

    Merci pour tes articles, alice

    J'aime

    1. Bonjour Alice,
      Je ne versionne pas tout mon home, seulement les Documents, Images, Vidéos, Musique. Pour ce qui est des métadonnées, il faut que je regarde ça de plus près. En fait, j’ai passé une bonne partie de la soirée à tester Borg et Git-annex mais ça ne me convient pas. Comme je suis très texte (j’écris beaucoup), j’ai un répertoire personnel qui est plutôt léger. Donc, la simplicité de GitLab correspond à mes attentes. Si je trouve mieux, je changerai 🙂
      Au plaisir de te relire

      J'aime

  4. Hello,
    Tu as aussi git-annex qui est plutot orienté pour ce genre d’usage. Il y a meme un assistant sous forme de webapp pour avoir une synchro. En bonus il garde l’emplacement des fichiers sur les différents remotes ce qui est très pratique pour savoir si un fichier se trouve en offline sur une clé USB par exemple.

    J'aime

    1. Salut,
      Merci pour ton commentaire. J’ai essayé git-annex et aussi le webapp. Mais j’avoue qu’il faut que je regarde ça de plus près parce que c’est encore un peu obscur. Cela dit, j’ai vu qu’il était possible de le coupler avec Borg.
      Pour l’instant, je reste sur Gitlab et la formule Git-annex + Borg fera peut-être l’objet d’un prochain article. 😉

      J'aime

  5. Pour ma part cela ne me choque pas du tout de versionner d’autres fichiers que du texte avec Git.

    Git ne sauvegarde que la difference des fichiers entre chaques commit et c’est pour cela qu’il est très performant sur le stockage. En revanche cela n’est vrai que pour les documents texte.

    Pour les documents binaires (images, son, vidéos), Git est moins adapté car il ne sauras pas détecter les changements et va stocker la version complète entre chaque changements. Ainsi pour un document Word (qui n’est pas un fichier texte) d’1Mo, Git occupera 1 Mo à chaque modifications. C’est pas top mais cela permettra de retrouver la version exacte du fichier entre chaque modifications.

    Une solution à ca est Git LFS (développé par Github et intégré dans Git) qui va stoquer les fichier binaires ailleurs et remplacer le fichier par un pointeur sous fichier texte. Je n’ai pas de retour la dessus car je ne l’ai pas utilisé mais je te recommande de jetter un coup d’oeuil: https://github.com/git-lfs/git-lfs/wiki/Installation

    J'aime

    1. Merci pour ton commentaire,
      J’ai beaucoup de documents texte et un petit volume d’images et de vidéos. Donc finalement, GitLab est pas si mal pour l’usage que j’en fait. Je vais quand-me regarder ton lien sur Git LFS. Ça va peut-être m’intéresser…

      J'aime

    2. > Git ne sauvegarde que la difference des fichiers entre chaques commit et c’est pour cela qu’il est très performant sur le stockage. En revanche cela n’est vrai que pour les documents texte.

      Faux ! Git sauvegarde le document en entier, même si ce n’est que du texte : « En revanche, si le fichier est modifié, les deux versions sont stockées sur le disque. » Cf https://fr.wikipedia.org/wiki/Git

      J'aime

      1. Et en ce qui concerne LFS, petite explication de l’utilité : chaque version de fichier sera toujours sauvegardé, mais le stockage via LFS permet d’avoir un dépôt qui est lui-même léger.

        Exemple :
        – avec git normal, si tu clones un dépôt où un fichier de 100Mio a eu 3 versions, le clonage va télécharger au minimum 300Mio.
        – avec git + LFS, les fichiers de 100Mio dans LFS, ton clone sera tout léger car les fichiers stockés dans LFS ne sont pas inclus directement dans le dépôt. Et si tu dois bosser sur ces fichiers qui sont dans LFS, seule la dernière version sera téléchargée et utilisée (sauf si bien sûr, tu reviens en arrière dans l’historique).

        J'aime

Votre commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l’aide de votre compte WordPress.com. Déconnexion /  Changer )

Photo Google

Vous commentez à l’aide de votre compte Google. Déconnexion /  Changer )

Image Twitter

Vous commentez à l’aide de votre compte Twitter. Déconnexion /  Changer )

Photo Facebook

Vous commentez à l’aide de votre compte Facebook. Déconnexion /  Changer )

Connexion à %s