2009-09-29 9 views
1

Avertissement: Les choses seraient plus simples si j'avais su au sujet de git-svn au début.SVN à git ... maintenant git à SVN. Tant de conflits

J'avais une base de code importante dans SVN, et je l'ai grossièrement trouvée dans git. La vie au travail était très douloureuse sans ramification rapide et efficace, donc tout cela a été accompli dans un peu de précipitation. Mon processus était:

svn export 
git init . 
git add . 
git commit -a -m "initial commit" 

Maintenant, j'en ai fini avec mes projets de petites succursales. J'étais capable de «combattre les feux» dans une branche propre et faire du développement sur les autres. C'était super. Mes branches sont maintenant fusionnées en une seule, et je suis prêt à récupérer ce code dans SVN.

J'ai travaillé un peu avec git-svn maintenant, après avoir obtenu la configuration svn repo et récupéré. Mais c'est aussi loin que je peux.

En supposant que ma branche git est "maître", et mon git-svn repo est "svnrepo":

git checkout master 
git rebase svnrepo 

échoue et jette des masses de conflits de fusion et les erreurs "existe déjà dans l'indice".

git checkout svnrepo 
git rebase master 

échoue exactement de la même manière.

Comment puis-je conserver l'historique git et récupérer ce code dans SVN?

Répondre

1

Je ferais une séquence de git cherry-pick opérations sur votre branche "svnrepo" pour passer par-dessus chaque commit pertinent de la branche "master" (en commençant par la plus ancienne). Cherry picking est largement agnostique en ce qui concerne l'ascendance de chaque commit, et va essayer d'appliquer le patch sans se soucier d'où il vient. Une fois que vous avez fini de sélectionner tous les commits, utilisez git svn dcommit pour les valider dans Subversion.

Notez que si vous avez un historique non linéaire sur la branche "master", vous voudrez essayer de l'aplanir avant de repasser votre code sur Subversion. Cela peut nécessiter un peu de travail supplémentaire, mais étant donné que Subversion ne prend pas en charge l'historique non linéaire, c'est à peu près une étape obligatoire.

Questions connexes