Passez à Git

Convert

L'étape suivante de la migration de SVN vers Git consiste à importer le contenu du référentiel SVN dans un nouveau référentiel Git. Nous allons effectuer ceci à l'aide de l'utilitaire git svn qui est livré avec la plupart des packages Git, puis nous nettoierons le résultat avec svn-migration-scripts.jar. Nous allons effectuer ceci à l'aide de l'utilitaire git svn qui est livré avec la plupart des packages Git, puis nous nettoierons le résultat avec svn-migration-scrip Nous allons effectuer ceci à l'aide de l'utilitaire git svn qui est livré avec la plupart des packages Git, puis nous nettoierons le résultat avec svn-migration-scrip Nous allons effectuer ceci à l'aide de l'utilitaire git svn qui est livré avec la plupart des packages Git, puis nous nettoierons le résultat avec svn-migration-scripNous allons effectuer ceci à l'aide de l'utilitaire git svn qui est livré avec la plupart des packages Git, puis nous nettoierons le résultat avec svn-migration-scripts.jar.

Beware that the conversion process can take a significant amount of time for larger repositories, even when cloning from a local SVN repository. As a benchmark, converting a 400MB repository with 33,000 commits on master took around 12 hours to complete.

Pour les référentiels de taille raisonnable, les étapes suivantes doivent être exécutées sur l'ordinateur local principal de la migration. Cependant, si vous avez un grand référentiel de données et désirez réduire le temps de conversion, vous pouvez exécuter git svn clone sur le serveur SVN au lieu de la machine locale principale de la migration. Cependant, si vous avez un grand référentiel de données et désirez réduire le temps de conversion, vous pouvez exécuter git svn clone sur le serveur SVN au lieu de la machine locale principale de la migrations. Cependant, si vous avez un grand référentiel de données et désirez réduire le temps de conversion, vous pouvez exécuter git svn clone sur le serveur SVN au lieu de la machine locale principale de la migrations. Ceci évitera le délai supplémentaire nécessaire pour cloner via une connexion réseau.

Clone the SVN repository

La commande git svn clone transforme le tronc, les branches et les balises de votre référentiel SVN en un nouveau référentiel Git. La commande git svn clone transforme le tronc, les branches et les balises de votre référentiel SVN en un nouveau référentiel Git. La commande git svn clone transforme le tronc, les branches et les balises de votre référentiel SVN en un nouveau référentiel Git. Suivant la structure de votre référentiel SVN, la commande doit être configurée différemment.

Git migration: git svn clone command

Standard SVN layouts

Si votre projet SVN utilise la configuration de répertoires standard /tronc /branches et /balises, vous pouvez utiliser l'option --stdlayout au lieu de spécifier manuellement la structure du référentiel. Si votre projet SVN utilise la configuration de répertoires standard /tronc /branches et /étiquettes, vous pouvez utiliser l'option --stdlayout au lieu de spécifier manuellement la structure du référentiel.Si votre projet SVN utilise la configuration de répertoires standard /tronc /branches et /balises, vous pouvez utiliser l'option --stdlayout au lieu de spécifier manuellement la structure du référentiel. Si votre projet SVN utilise la configuration de répertoires standard /tronc /branches et /étiquettes, vous pouvez utiliser l'option --stdlayout au lieu de spécifier manuellement la structure du référentiel.Si votre projet SVN utilise la configuration de répertoires standard /tronc /branches et /balises, vous pouvez utiliser l'option --stdlayout au lieu de spécifier manuellement la structure du référentiel. Si votre projet SVN utilise la configuration de répertoires standard /tronc /branches et /étiquettes, vous pouvez utiliser l'option --stdlayout au lieu de spécifier manuellement la structure du référentiel. Si votre projet SVN utilise la configuration de répertoires standard /tronc /branches et /étiquettes, vous pouvez utiliser l'option --stdlayout au lieu de spécifier manuellement la structure du référentiel. Si votre projet SVN utilise la configuration de répertoires standard /tronc /branches et /balises, vous pouvez utiliser l'option --stdlayout au lieu de spécifier manuellement la structure de l'entrepôt de données. Si votre projet SVN utilise la configuration de répertoires standard /tronc /branches et /balises, vous pouvez utiliser l'option --stdlayout au lieu de spécifier manuellement la structure de l'entrepôt de données. Exécutez la commande suivante dans le répertoire ~/GitMigration : Exécutez la commande suivante dans le répertoire ~/GitMigration : Exécutez la commande suivante dans le répertoire ~/GitMigration :

git svn clone --stdlayout --authors-file=authors.txt
<dépôt-svn>/<projet> <nom-dépôt-git>

Où <svn-repo> est l'URI du référentiel SVN que vous désirez migrer, <project> est le nom du projet que vous voulez importer, et <git-repo-name> est le nom de répertoire du nouveau référentiel Git. Où <svn-repo> est l'URI du référentiel SVN que vous désirez migrer, <project> est le nom du projet que vous voulez importer, et <git-repo-name> est le nom de répertoire du nouveau référentiel Git. Où <svn-repo> est l'URI du référentiel SVN que vous désirez migrer, <project> est le nom du projet que vous voulez importer, et <git-repo-name> est le nom de répertoire du nouveau référentiel Git. Où <svn-repo> est l'URI du référentiel SVN que vous désirez migrer, <project> est le nom du projet que vous voulez importer, et <git-repo-name> est le nom de répertoire du nouveau référentiel Git. Où <svn-repo> est l'URI du référentiel SVN que vous désirez migrer, <project> est le nom du projet que vous voulez importer, et <git-repo-name> est le nom de répertoire du nouveau référentiel Git. Où <svn-repo> est l'URI du référentiel SVN que vous désirez migrer, <project> est le nom du projet que vous voulez importer, et <git-repo-name> est le nom de répertoire du nouveau référentiel Git. Où <svn-repo> est l'URI du référentiel SVN que vous désirez migrer, <project> est le nom du projet que vous voulez importer, et <git-repo-name> est le nom de répertoire du nouveau référentiel Git.

Par exemple, si vous migriez un projet appelé Confluence, hébergé sur https://svn.atlassian.com, Par exemple, si vous migriez un projet appelé Confluence, hébergé sur https://svn.atlassian.com,Par exemple, si vous migriez un projet appelé Confluence, hébergé sur https://svn.atlassian.com, Par exemple, si vous migriez un projet appelé Confluence, hébergé sur https://svn.atlassian.com,Par exemple, si vous migriez un projet appelé Confluence, hébergé sur https://svn.atlassian.com, vous pouvez exécuter ce qui suit :

git svn clone --stdlayout --authors-file=authors.txt
 https://svn.atlassian.com/Confluence ConfluenceAsGit

Non-standard SVN layouts

Si votre référentiel n'est pas configuré de façon standard, vous devez fournir les emplacements de votre tronc, des branches et des balises à l'aide des options de la ligne de commande --tronc, --branches et --balises. Si votre référentiel n'est pas configuré de façon standard, vous devez fournir les emplacements de votre tronc, des branches et des balises à l'aide des options de la ligne de commande --tronc, --branches et --balises.Si votre référentiel n'est pas configuré de façon standard, vous devez fournir les emplacements de votre tronc, des branches et des balises à l'aide des options de la ligne de commande --tronc, --branches et --balises. Si votre référentiel n'est pas configuré de façon standard, vous devez fournir les emplacements de votre tronc, des branches et des balises à l'aide des options de la ligne de commande --tronc, --branches et --balises.Si votre référentiel n'est pas configuré de façon standard, vous devez fournir les emplacements de votre tronc, des branches et des balises à l'aide des options de la ligne de commande --tronc, --branches et --balises. Si votre entrepôt de données n'est pas configuré de façon standard, vous devez fournir les emplacements de votre tronc, des branches et des balises à l'aide des options de la ligne de commande --tronc, --branches et --balises Si votre référentiel n'est pas configuré de façon standard, vous devez fournir les emplacements de votre tronc, des branches et des balises à l'aide des options de la ligne de commande --tronc, --branches et --balises. Par exemple, si vous avez des branches stockées à la fois dans le répertoire /branches et dans les répertoires /bugfixes, vous utiliserez la commande suivante : Par exemple, si vous avez des branches stockées à la fois dans le répertoire /branches et dans les répertoires /bugfixes, vous utiliserez la commande suivante : Par exemple, si vous avez des branches stockées à la fois dans le répertoire /branches et dans les répertoires /bugfixes, vous utiliserez la commande suivante : Par exemple, si vous avez des branches stockées à la fois dans le répertoire /branches et dans les répertoires /bugfixes, vous utiliserez la commande suivante :

git svn clone --trunk=/trunk --branches=/branches
--branches=/bugfixes --tags=/tags --authors-file=authors.txt
<dépôt-svn>/<projet> <nom-dépôt-git>

Inspect the new Git repository

Une fois que git svn clone a terminé (cela peut durer un moment), vous trouverez un nouveau référentiel intitulé <git-repo-name> dans ~/GitMigration. Une fois que git svn clone a terminé (cela peut prendre un moment), vous trouverez un nouveau référentiel intitulé <git-repo-name> dans ~/GitMigration. Une fois que git svn clone a terminé (cela peut durer un moment), vous trouverez un nouveau référentiel intitulé <git-repo-name> dans ~/GitMigration. Une fois que git svn clone a terminé (cela peut prendre un moment), vous trouverez un nouveau référentiel intitulé <git-repo-name> dans ~/GitMigration. Une fois que git svn clone a terminé (cela peut durer un moment), vous trouverez un nouveau référentiel intitulé <git-repo-name> dans ~/GitMigration. Une fois que git svn clone a terminé (cela peut prendre durer un moment), vous trouverez un nouveau référentiel intitulé <git-repo-name> dans ~/GitMigration. Une fois que git svn clone a terminé (cela peut durer un moment), vous trouverez un nouveau référentiel intitulé <git-repo-name> dans ~/GitMigration. C'est le référentiel Git converti. Vous devriez être à même de basculer dans <git-repo-name> et exécuter une quelconque des commandes Git standard afin d'explorer votre projet. Vous devriez être à même de basculer dans <git-repo-name> et exécuter une quelconque des commandes Git standard afin d'explorer votre projet. Vous devriez être à même de basculer dans <git-repo-name> et exécuter une quelconque des commandes Git standard afin d'explorer votre projet.

Les branches et les balises ne sont pas importées dans le nouveau référentiel comme vous pourriez vous y attendre.  Vous ne trouverez aucune de vos branches SVN dans les branches git résultantes, pas plus que vous ne retrouverez vos balises SVN dans les balises git résultantes. Vous ne trouverez aucune de vos branches SVN dans les branches git résultantes, pas plus que vous ne retrouverez vos balises SVN dans les balises git résultantes. Vous ne trouverez aucune de vos branches SVN dans les branches git résultantes, pas plus que vous ne retrouverez vos balises SVN dans les balises git résultantes. Vous ne trouverez aucune de vos branches SVN dans les branches git résultantes, pas plus que vous ne retrouverez vos balises SVN dans les balises git résultantes. Vous ne trouverez aucune de vos branches SVN dans les branches git résultantes, pas plus que vous ne retrouverez vos balises SVN dans les balises git résultantes. Mais si vous exécutez git branch -r, vous trouverez toutes les branches et les balises de votre référentiel SVN. Mais si vous exécutez git branch -r, vous trouverez toutes les branches et les balises de votre référentiel SVN.Mais si vous exécutez git branch -r, vous trouverez toutes les branches et les balises de votre référentiel SVN. La commande git svn clone importe vos branches SVN en tant que branches à distance et importe vos balises SVN en tant que branches préfixées avec les balises/. La commande git svn clone importe vos branches SVN en tant que branches à distance et importe vos balises SVN en tant que branches préfixées avec les balises/. La commande git svn clone importe vos branches SVN en tant que branches à distance et importe vos étiquettes SVN en tant que branches préfixées avec les étiquettes/. La commande git svn clone importe vos branches SVN en tant que branches à distance et importe vos balises SVN en tant que branches préfixées avec les balises/.La commande git svn clone importe vos branches SVN en tant que branches à distance et importe vos balises SVN en tant que branches préfixées avec les balises/.

Git migration: structure of cloned Git repo

This behavior makes certain two-way synchronization procedures easier, but it can be very confusing when trying to make a one-way migration Git. That’s why our next step will be to convert these remote branches to local branches and actual Git tags.

Clean the new Git repository

Le script Clean-git livré inclus dans svn-migration-scripts.jar Le script Clean-git livré inclus dans svn-migration-scripts.jar Le script Clean-git livré inclus dans svn-migration-scripts.jar Le script Clean-git livré inclus dans svn-migration-scripts.jar Le script Clean-git livré inclus dans svn-migration-scripts.jar transforme les branches SVN en branches locales Git et les étiquettes SVN en étiquettes Git complètes. Notez qu'il s'agit d'une opération destructive et que vous ne pourrez plus déplacer les commits en sens inverse depuis le référentiel Git vers l'entrepôt SVN. Notez qu'il s'agit d'une opération destructive et que vous ne pourrez plus déplacer les commits en sens inverse depuis le référentiel Git vers l'entrepôt SVN. Notez qu'il s'agit d'une opération destructive et que vous ne pourrez plus déplacer les commits en sens inverse depuis le référentiel Git vers l'entrepôt SVN.

Si vous suivez ce guide de migration, ce n'est pas un problème, car il recommande une sync unidirectionnelle de SVN vers Git (le référentiel Git est considéré en lecture seule après l'étape de la migration. Si vous suivez ce guide de migration, ce n'est pas un problème, car il recommande une sync unidirectionnelle de SVN vers Git (le référentiel Git est considéré en lecture seule après l'étape de la migration. Si vous suivez ce guide de migration, ce n'est pas un problème, car il recommande une sync unidirectionnelle de SVN vers Git (le référentiel Git est considéré en lecture seule après l'étape de la migration. Cependant, si vous planifiez d'effectuer des commits vers le référentiel Git et vers le référentiel SVN pendant le processus de migration, vous ne devriez pas exécuter les commandes suivantes. Cependant, si vous planifiez d'effectuer des commits vers le référentiel Git et vers le référentiel SVN pendant le processus de migration, vous ne devriez pas exécuter les commandes suivantes. Cependant, si vous planifiez d'effectuer des commits vers le référentiel Git et vers le référentiel SVN pendant le processus de migration, vous ne devriez pas exécuter les commandes suivantes. Ceci est une tâche avancée, car elle n'est pas recommandée pour un projet usuel.

Pour voir ce qui peut être nettoyé, exécutez la commande suivante dans ~/GitMigration/<git-repo-name> : Pour voir ce qui peut être nettoyé, exécutez la commande suivante dans ~/GitMigration/<git-repo-name> :Pour voir ce qui peut être nettoyé, exécutez la commande suivante dans ~/GitMigration/<git-repo-name> :

java -Dfile.encoding=utf-8 -jar ~/svn-migration-scripts.jar clean-git

Ceci va afficher toutes les modifications que le script veut effectuer, mais en fait aucune ne sera exécutée. Pour exécuter ces modifications, vous devez utiliser l'option --force ainsi : Pour exécuter ces modifications, vous devez utiliser l'option --force ainsi : Pour exécuter ces modifications, vous devez utiliser l'option --force ainsi :

java -Dfile.encoding=utf-8 -jar ~/svn-migration-scripts.jar clean-git
--force

Vous devriez voir maintenant vos branches SVN dans l'affichage des branches git, ainsi que vos étiquettes SVN dans l'affichage des balises git. Vous devriez voir maintenant vos branches SVN dans l'affichage des branches git, ainsi que vos étiquettes SVN dans l'affichage des étiquettes balises git. Vous devriez voir maintenant vos branches SVN dans l'affichage des branches git, ainsi que vos étiquettes SVN dans l'affichage des balises git. Vous devriez voir maintenant vos branches SVN dans l'affichage des branches git, ainsi que vos étiquettes SVN dans l'affichage des étiquettes git. Vous devriez voir maintenant vos branches SVN dans l'affichage des branches git, ainsi que vos étiquettes SVN dans l'affichage des balises git. Cela signifie que vous avez converti avec succès votre projet SVN en référentiel Git.

Summary

Dans cette étape, vous avez transformé un référentiel SVN en un nouveau référentiel git avec la commande git svn clone, puis avez nettoyé la structure du référentiel résultant avec svn-migration-scripts.jar. Dans cette étape, vous avez transformé un référentiel SVN en un nouveau référentiel git avec la commande git svn clone, puis avez nettoyé la structure du référentiel résultant avec svn-migration-scripts.jar. Dans cette étape, vous avez transformé un référentiel SVN en un nouveau référentiel git avec la commande git svn clone, puis avez nettoyé la structure du référentiel résultant avec svn-migration-scripts.jar. Dans cette étape, vous avez transformé un référentiel SVN en un nouveau référentiel git avec la commande git svn clone, puis avez nettoyé la structure du référentiel résultant avec svn-migration-scripts.jar.Dans cette étape, vous avez transformé un référentiel SVN en un nouveau référentiel git avec la commande git svn clone, puis avez nettoyé la structure du référentiel résultant avec svn-migration-scripts.jar. Dans l'étape suivante, vous apprendrez comme maintenir ce nouveau référentiel git en synchronisation avec tout nouveau commit vers le référentiel SVN. Cela sera un processus similaire à la conversion, mais il faut tenir compte d'un certain nomre de considération concernant le workflow pendant cette période de transition.

Prêt à découvrir Git ?

Essayez ce tutoriel interactif.

Démarrez maintenant