clean git

11/04/2018

situation initiale :

sur le serveur

git init --bare projet

sur le client

git clone root@2i.raphaelpiccolo.com:/root/projet projet
git clone root@2i.raphaelpiccolo.com:/root/projet projet2
git clone root@2i.raphaelpiccolo.com:/root/projet projet3

chacun des dossier projet* font environ 50ko

ajouter des fichiers de merde sur le 1er client

cd projet
git add v.mp4
git commit -m projet
git push

projet fait maintenant 70mo.

on peut puller sur le 2e git

cd projet2
git pull
projet2 fait maintenant 70mo aussi.

lancer le nettoyage sur un des clients :

cd projet
git filter-branch -f --index-filter 'git rm -rf --cached --ignore-unmatch *.mp4' --prune-empty -- --all
rm -rf .git/refs/original/
git reflog expire --expire=now --all
git gc --aggressive --prune=now

projet fait maintenant 50ko.

envoyer sur le serveur et aux autres developpeurs :

cd projet
git push origin master --force

puller sur l'autre client

cd projet2
git pull

le dossier n'a réduit de taille qu'a moitié. (35mo) car la video est toujours dans l'archive git locale mais plus dans le dossier. il faut relancer les commandes de nettoyage :

rm -rf .git/refs/original/
git reflog expire --expire=now --all
git gc --aggressive --prune=now
projet2 fait maintenant 50ko.

par contre sur projet3 la video n'avait pas encore été pullée

cd projet3
git pull

projet3 fait maintenant 50ko.

une autre technique est de cloner le repo une fois le 1er clean effectué, mais attention à bien backup et remettre tous les fichiers non gérés par git : config, uploads, etc

rm -rf projet2
git clone root@2i.raphaelpiccolo.com:/root/projet projet2

Raccourcis