Migrating a Git repository to LFS

Attention, dans videa-historique les --path s’appliquent à ce qu’on veut garder :

git clone --no-local jeu-vide-a/.git videa-historique
cd videa-historique
git filter-repo --path puzzle-game --path tests-amelie --path videa-02 --path .gitattributes --path FREE\ ART\ LICENSE\ 1.3
git branch -m main
git remote add origin git@framagit.org:lesoiseaux/videa-historique.git
git push -u origin main

Et avant cela, nous avons effectué la manoeuvre :

Pour transférer tous les binaires dans LFS

:warning: Cela prend un temps considérable…

cd jeu-vide-a
# D'abord on se renseigne
git lfs migrate info --everything
# Ensuite on inclut les fichier *binaires* (le texte se diff et se compresse bien)
git lfs migrate import --everything --include="*.stex,*.png,*.pdf"
# Et là on se fait peur
git push --force

Cette manoeuvre récrit tout l’historique depuis le début (d’où le push --force) et éventuellement laisse les images cassées (cela peut arriver, pour réparer il suffit de faire ) :

cd jeu-vide-a
# Récupérer les fichers LFS
git lfs fetch --all
# Ressortir les images en tant que telles
git lfs checkout **/*.{png,pdf,stex}

:warning: la notation **/*.{png,pdf,stex} est un raccourci de zsh pour demander l’ensemble des fichiers dans tous les sous-répertoires qui finissent en .png, .pdf, ou .stex. En bash on préférera le faire en plusieurs fois. Peut-être la commande git-lfs-checkout fournit-elle -r pour récursif, mais je n’ai pas vérifié.

Et les git branch -m main c’était pour en profiter et renommer mastermain