[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

[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: