La seule façon dont j'ai fait cela par le passé (sans savoir si c'est la meilleure ou la seule façon!) était explicitement de git svn fetch
l'historique précédent (vous devrez peut-être avoir un deuxième remote pour cela) puis de greffer l'arbre renommé sur l'ancien historique avec git filter-branch
(il y a un exemple spécifique dans la documentation pour reparenter un arbre).
Exemple
De : svn://server/repo/project
À : svn://server/repo/project_v1
Étape facultative : Si vous n'avez pas encore de dépôt git-svn
pour cela, allez-y et faites un git svn clone svn://server/repo/project
. La plupart des gens auront probablement déjà ce dépôt car ils ont travaillé avec git-svn
tout au long. Si vous n'avez pas encore de dépôt git, vous pouvez faire le clone initial des deux côtés.
Dans votre dépôt git-svn
, ajoutez un remote pour le nouveau nom du projet. Je ne pense pas qu'il y ait une commande pour cela, vous ajoutez simplement une section à votre .git/config
très similaire à celle qui est déjà là :
[svn-remote "svn_v1"]
url = svn://server/repo/project_v1
fetch = :refs/remotes/git-svn-v1
Ce nouveau remote SVN peut être sélectionné avec l'option --remote svn_v1
pour toute commande git-svn
. La première chose que vous voudrez faire est git-svn fetch --remote svn_v1
qui va peupler votre dépôt git avec l'historique de cette copie. Comme la question originale le note, cela sera un historique très succinct !
Ensuite, appliquez l'exemple dans la page de manuel de git filter-branch
. Vous devrez connaître la pointe de l'ancien historique, qui est git show-ref -s remotes/git-svn
(encore une fois, en supposant que votre clone original était l'ancienne version). Ensuite, utilisez git filter-branch --parent-filter 'sed "s/^\$/-p /"' remotes/git-svn-v1
où est le SHA que vous avez obtenu pour la pointe de l'ancien historique.
Vérifiez que cela a fonctionné avec git log remotes/git-svn-v1
et vérifiez tout l'historique.
À ce stade, vous pouvez aller sur votre branche de travail et faire un git reset --hard remotes/git-svn-v1
pour passer cette branche sur le nouvel historique.
Notez que le svn-remote
nommé "svn" sera votre valeur par défaut, donc à la fin, vous voudrez renommer les remotes dans les lignes [svn-remote "..."]
dans votre .git/config
pour que votre principal soit nommé "svn". Vous pouvez nommer l'autre -old
ou même le supprimer.
Avertissement : C'est de mémoire et je n'ai pas juste répété ces étapes moi-même. Les commentaires et corrections sont les bienvenus.