[HS] git-svn et git-filter-repo
Salut,
Une question git (qui n'a donc rien à voir avec debian).
- J'ai un dépôt svn d'un très vieux projet, encore actif, avec des utilisateurs habitués à svn.
- J'aimerais permettre à ceux qui utilisent git couramment de pouvoir le faire sur ce projet
=> git-svn [1] permet de faire ça
- Le dépôt svn est énorme, avec des éléments de doc obsolètes dans l'historique (plein de zip
et de vidéos ont été mis dans le dépôt, virés depuis), trop gros pour l'envoyer sur un gitlab
=> git-filter-repo [2] est parfait pour ça (conseillé dans la doc officielle [3] à la place de
`git filter-branch …`)
Mon pb est qu'après avoir nettoyé l'historique, je peux plus lancer de `git svn fetch` pour
récupérer les nouveaux commits svn, ça plante :
error: invalid object xxx yyyyyy for 'fichier/viré'
fatal: git-write-tree: error building trees
write-tree: command returned error: 128
J'ai alors pensé à un truc en deux temps
- un gros dépôt xxxGitSvn qui fetch le svn, en local chez moi, avec tout l'historique
- un dépôt git xxxGit, initié comme clone de xxxGitSvn, nettoyé avec git-filter-repo puis
utilisé comme relai, pull de xxxGitSvn et push vers mon gitlab
(pas trop grave si ça empêche d'envoyer des modifs faites sous git vers svn, l'usage principal
est de pouvoir se balader dans l'historique et regarder des diff, un truc théoriquement
possible avec svn mais en pratique complètement infernal sur un projet aussi gros avec 10 ans
d'historique et 15k révisions).
Mais ça marche pas, au premier pull
xxxGit <= xxxGitSvn
il récupère dans son historique tout ce que j'avais viré…
Je reconnais que c'est un cas un peu tordu, mais est-ce qu'il y a un moyen de faire ça ?
(ne pas récupérer tout l'historique qu'on a pas localement lors d'un pull je suppose que ça
revient à dire à git de considérer que le commit xx local est le même que le commit yy de
tel remote) ?
Si y'a pas de solution, j'irai filtrer l'historique à la source, avec svnadmin dump /
svndumpfilter exclude / svnadmin create / svnadmin load, mais je préférais garder le dépôt svn
intact.
[1] https://git-scm.com/docs/git-svn
[2] https://github.com/newren/git-filter-repo (qui demande git ≥ 2.22.0 => paquet git de
unstable)
[3] https://git-scm.com/book/en/v2/Git-Tools-Rewriting-History ou
https://git-scm.com/book/fr/v2/Utilitaires-Git-R%C3%A9%C3%A9crire-l%E2%80%99historique
--
Daniel
Dans le passé, il y avait plus de futur que maintenant ?
Philippe Geluck, Le chat
Reply to: