Backup avec Git et Dropbox

Dropbox est un outil formidable pour synchroniser toutes sortes de fichiers avec tous vos appareils, ce qui se révèle vite indispensable lorsqu'on développe un site Web ou une application.

Cependant, si vous maintenez les versions de vos projets de développement avec Git dans Dropbox, cela peut vite créer des conflits de fichiers et vous risquez de perdre des données.

Solution : utiliser Dropbox comme un repository de destination, en parallèle de GitHub et/ou BitBucket.

LE PRINCIPE

Garder les dossiers et fichiers d'un projet géré avec Git dans Dropbox est une bonne idée au départ, mais crée vite des problèmes.

Vous allez vous retrouver avec, au mieux, des fichiers “xxx Copie en conflit de xxx” en grand nombre, et au pire, avec ces mêmes fichiers dans les répertoires de Git avec au final des messages d'erreur et l'impossibilité de sauvergarder ou récupérer votre projet. Moche.

La solution est de garder vos dossiers originaux en dehors de Dropbox, dans un dossier dédié au développement, et d'utiliser des dossiers dans Dropbox comme repository de destination.

Si vous avez déjà l'habitude de “push” votre projet vers GitHub par exemple, alors Dropbox devient simplement une destination (remote) supplémentaire.

Comme vous n'intervenez plus directement dans le dossier Dropbox, il n'y a plus de conflits de versions de fichiers.

NETTOYER LE PROJET

Si votre projet contient déjà des fichiers “Conflit”, voici une astuce toute simple pour le nettoyer.

Au lieu de passer par le Finder (il y aura des erreurs) ou par le site de Dropbox (ce sera fastidieux) et de tout sélectionner manuellement, une simple commande Bash va régler le problème en un instant.

Dans le Terminal, avec $FILE étant le nom du/des fichier(s), $DIRPROJ étant le répertoire du projet et $DIRBACKUP étant le dossier de backup :

find $DIRPROJ -name $FILE -exec mv {} $DIRBACKUP \;

Cela déplace tous les fichiers $FILE trouvés dans le dossier $DIRPROJ vers le dossier $DIRBACKUP.

Exemple concret pour les fichiers en conflit dans le dossier courant :

cd DIRPROJ
find . -name "*Copie*conflit*" -exec mv {} ~/lostfound \;

…et voilà le dossier courant nettoyé de tout fichier conflictuel nommé “xxx Copie de xxx”.

Si vous n'avez pas peur, vous pouvez effacer les fichiers au lieu de les conserver, mais attention à ce que vous faites :

find $DIRPROJ -name $FILE -exec rm rf {} \;

LA MANOEUVRE

On va partir du principe que votre projet est déjà géré par Git.

Si c'est un nouveau projet, vous pouvez l'initialiser en un instant avec ceci :

cd DIRPROJET
git init && git add . && git commit -m "Premier commit"

DROPBOX

Dans un dossier dédié dans Dropbox, par exemple REPOS, vous allez créer un dossier de bare repository avec Git pour votre projet :

cd ~/Dropbox/REPOS
git init --bare PROJET.git

Il est important de garder l'extension .git pour le répertoire de destination.

On revient ensuite dans le dossier de travail de votre projet, qui se trouve donc désormais en dehors de Dropbox : nous allons y déclarer la nouvelle destination.

cd DIRPROJET
git remote add dropbox ~/Dropbox/REPOS/PROJET.git

Dernière étape : on pousse le projet vers son nouveau repository dans Dropbox.

cd DIRPROJET
git push dropbox master

C'est tout ! Dorénavant, après chaque edit important, vous poussez le projet vers Dropbox et vous avez votre backup.

Pour le récupérer sur une autre machine, ou sur la votre en cas de perte :

cd PROJETS
git clone PROJET ~/Dropbox/REPOS/PROJET.git

GITHUB/BITBUCKET

Mais bien évidemment le plus pratique est de pousser également le projet vers GitHub et/ou BitBucket.

Personnellement j'utilise GitHub pour les repos publics de mes projets OpenSource, et BitBucket pour avoir des repos privés pour mes autres projets.

Toutes les informations sont déjà en ligne pour utiliser ces deux outils, mais voici un résumé pour BitBucket.

  1. Créez un nouveau repository à partir du site de BitBucket et déclarez-le comme “Private”

  2. Allez dans la section “I have files to import” et récupérez les deux instructions importantes que je recopie ici :

cd DIRPROJET
git remote add bitbucket https://USER@bitbucket.org/USER/PROJET.git
git push bitbucket master
  1. Entrez votre login et password quand Git vous le demande.

Comme précédemment, vous pourrez ensuite récupérer votre projet comme ceci :

cd NEWDIR
git clone PROJET https://USER@bitbucket.org/USER/PROJET.git

C'est terminé !

CONCLUSION

Vous disposez désormais de repos de vos projets dans votre Dropbox, prêts à être clonés en cas de besoin, en plus des versions chez GitHub ou BitBucket.

Mais n'oubliez pas également de sauvegarder régulièrement votre dossier source !

Avoir des repos en ligne ne suffit pas, même en double, ne serait-ce que parceque Git ne sauvegarde probablement pas tous vos fichiers. Inspectez donc votre .gitignore pour en être certain.

De toute façon, il vaut mieux avoir trop de backups que pas assez…

Auteur: Eric Dejonckheere