71 votes

Comment migrer du code de SVN vers GIT sans perdre l'historique des validations?

J'aimerais connaître la méthode recommandée pour déplacer notre code d'un référentiel SVN vers un référentiel GIT, afin de permettre la transition de notre équipe de développeurs et de commencer à utiliser GIT.

Pouvons-nous faire la transition et garder tous les commits faits dans le référentiel SVN?

De plus, notre équipe est satisfaite de SVN pour le moment, mais elle ne sait pas que créer des branches dans GIT est beaucoup plus facile que SVN. Où puis-je trouver un exemple pratique qui prouve le pouvoir de GIT dans les branches?

48voto

J. C. Salomon Points 1542

Git-svn outil inclus avec Git va gérer la plupart des dépôts Subversion, y compris dans les branches. Il est très couramment utilisé, en particulier par les équipes qui sont en train de faire une conversion, car il permet à Git de se comporter comme un client Subversion. Git-svn produit un dépôt Git avec toute l'histoire de l'origine de la Subversion des pensions. Voir git-svn(1) et le Git-Svn Crash course.

Quelques remarques: Le clone initial prendra un peu de temps; git-svn est de vérifier chaque révision, à partir de la version 1, et en s'engageant chacun à tour de rôle pour le nouveau repo Git. Aussi, vous avez besoin de pré-déclarer votre repo SVN structure correctement. Aussi, si votre repo SVN est suffisamment ardu (avez-vous déjà commis un changement qui s'étendait sur plusieurs branches?) l'outil peut devenir confus.

Eric Raymond (esr) a été de travailler sur reposurgeon, "un interpréteur de commande pour la réalisation de délicates opérations d'édition sur le contrôle de version d'histoires". L'outil inclut des scripts à des fins diverses, y compris le nettoyage, les résultats de la cité du vatican conversions.

La prochaine version 2.0 inclut la prise en charge pour la lecture SVN dumpfiles complète et idiomatique traduction Git, Mercurial, &c.; voir http://esr.ibiblio.org/?p=4071 pour plus de détails ou consultez la version bêta de http://gitorious.org/reposurgeon. La version bêta est apparemment stable et très utilisable déjà. Il est testé sur un dépôt Subversion, qui "est vaste, complexe dans la structure de la branche, et assez vieux pour avoir commencé la vie comme un CVS repo. Cette dernière partie est important parce que certains de la plus moche des problèmes de traduction qui rôdent dans le dos de l'histoire de la Subversion projets sont étranges Subversion séquences d'opérations (y compris les combinaisons de la direction des opérations de copie) générés par cvs2svn."

Concernant votre deuxième question, il n'est pas de ramification où la puissance de Git est donc utile (bien que Git est au moins aussi puissant que la Subversion à cet égard); c'est lorsqu'il s'agit de la fusion de ces branches Git brille. Lire le Git Community Book, en particulier la section dans le chapitre 3 intitulé "Base de Ramification et de la Fusion" et de la section dans le chapitre 5 intitulé "Advanced branchement et de Fusion".

19voto

l0b0 Points 10719

Puisqu'il y a déjà beaucoup de personnes travaillant avec git-svn , je dirais que c'est très possible. La commande suivante est assez bien connue:

 git svn clone -s http://svn/repo
 

Selon le manuel (vérifié localement), cela conservera le "tronc, les étiquettes et les branches".

11voto

Nate Points 870

Mise À Jour Avril 2014

Il existe un outil appelé Svn2Git qui fait un assez bon travail de faire de ce processus un peu plus facile. La documentation sur le projet Github est assez bonne.

Il est intéressant de noter que tandis que git-svn par défaut tirant de tout le chemin que vous spécifiez, pas de branches, les marques et le tronc. Svn2git est à l'opposé. Il sera par défaut à la recherche d'un tronc, des branches et des tags sous le chemin et vous devez utiliser --nobranches ou --notags à dire ne pas effectuer de recherche pour ceux (même si cela peut annuler les avantages de svn2git).


Une fois que vous passer à Git, je vous suggère de passer tout le monde et de rester à l'aide de Git. C'est plus compliqué, mais la transition sera en vaut la peine. Github.com prend en charge l'accès des pensions de titres à l'aide d'un client Subversion (mais vous risquez de perdre la puissance de Git ramification) et qui pourrait être un bon bouche-trou.

Puis-je garder mon Subversion repo?

Lorsque vous utilisez la méthode ci-dessous pour se déplacer, tous les courants s'engage restera dans la Subversion des pensions. Vous pourriez être en mesure de faire une synchronisation de la Subversion des pensions de le repo Git, mais dans l'autre sens devient très compliqué, très rapide. Je ne recommanderais pas d'essayer de synchroniser de toute façon et il suffit de déplacer tout le monde en une fois.

Ce qui est puissant sur Git?

Git ramification est puissant mais il n'est pas tout, il est à Git. Avoir un historique complet localement signifie que vous pouvez faire tout ce que vous pouvez faire avec de la Subversion, mais sans avoir à contacter le serveur. L'examen et la recherche de l'histoire, de l'annulation des modifications, s'engageant localement, la ramification localement devenu immensément plus rapide. Git également de compresser les données, donc une Subversion (qui comprend seulement la dernière révision) finit par être d'environ la même taille qu'un Git checkout (qui inclut la totalité de l'histoire). Aussi, parce que les données sont compressées lors de son transfert, en poussant et en tirant sont bien plus rapide. Ne pas seulement pousser les branches Git, de tout mettre sur Git.

Comment faire pour déplacer des pensions de titres à l'aide de l' git svn méthode.

Tout d'abord, clone de la Subversion des pensions. Cela peut prendre un moment.

git svn clone http://www.example.com/svn-repo/projectA/trunk/

http://www.example.com/svn-repo/ de l'URL de la Subversion repo et projectA/trunk/ est le chemin d'accès que vous souhaitez copier dans le dépôt Git.

Si vous avez une mise en page standard, telles que l' projectA/trunk, projectA/branches/ et projectA/tags/ que vous pouvez ajouter --stdlayout et clone à partir d'un annuaire comme ça

git svn clone --stdlayout http://www.example.com/svn-repo/projectA/  projectA.git-svn

Et, si vous avez un tronc, des branches et des tags dossier nommé autrement que ci-dessus, vous donnez git svn clone des noms personnalisés pour chacun.

git svn clone --trunk my-trunk --branches my-branches --tags my-tags http://www.example.com/svn-repo/projectA/  projectA.git-svn

Une fois terminé tout ce que vous avez à faire est de pousser à la distance repo git avec --mirror.

cd projectA.git-svn
git push --mirror git@github.com:Account/projectA.git

À ce stade, vous devriez faire de votre Subversion des pensions de lecture seule pour empêcher les gens de tenter de s'engager pour une sortie datée emplacement.

5voto

eckes Points 17277

L'opération pourrait être converti entièrement, y compris les étiquettes et de toutes les branches à l'aide de git svn clone.

Il y a quelques réglages nécessaire pour obtenir les balises correctes, voir ce lien pour plus d'informations.

Ce sujet a été abordé ici à l'au moins une fois avant:
L'importation des branches du SVN (et tags) sur git-svn

2voto

Alexander Kitaev Points 568

L’approche de migration sûre et fluide de Svn vers Git consiste à utiliser SubGit - l’outil de synchronisation Git / Svn côté serveur. On peut installer SubGit dans le référentiel Subversion et continuer à utiliser simultanément Subversion et Git tant que dure le processus de migration.

Disclaimer: Je suis un développeur SubGit qui utilise déjà SubGit depuis six mois.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X