Conversion Git: une étape dans la migration de SVN vers Git
L'étape suivante de la migration de SVN vers Git consiste à importer le contenu du dépôt SVN dans un nouveau dépôt Git. Nous allons effectuer ceci à l'aide de l'utilitaire git svn
qui est livré avec la plupart des packages Git, puis nous nettoierons les résultats avec svn-migration-scripts.jar
*.
Gardez à l'esprit que le processus de conversion peut être relativement long pour les gros dépôts, même lorsqu'on les clone depuis un dépôt SVN local. À titre d'indication, la conversion d'un dépôt de 400 Mo avec 33 000 commits sur la branche principale peut prendre jusque 12 heures.
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.
*Veuillez noter que ces scripts ont été écrits lorsque seule la version 1.8.x de Git était disponible. Cette version de git doit donc être utilisée pour que les scripts fonctionnent.
Clonez le référentiel SVN
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.
Ressource connexe
Comment déplacer un dépôt Git complet
DÉCOUVRIR LA SOLUTION
Découvrir Git avec Bitbucket Cloud
Configurations SVN standard
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
<svn-repo>/<project> <git-repo-name>
Où
est l'URI du dépôt 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 dépôt 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
Configurations SVN non standard
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
<svn-repo>/<project> <git-repo-name>
Inspectez le nouveau dépôt Git
After git svn clone
has finished (this might take a while), you’ll find a new directory called <git-repo-name>
in ~/GitMigration
. This is the converted Git repository. You should be able to switch into <git-repo-name>
and run any of the standard Git commands to explore your project.
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/.
Ce comportement accompli certaines synchronisations bi-directionnelles avec plus de facilité, mais il peut semer la confusion lorsque l'on essaie d'effectuer une migration Git unidirectionnelle. C'est pourquoi notre prochaine étape consistera à convertir ces branches distantes en branches locales et étiquettes Git.
Nettoyez le nouveau dépôt Git.
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/Pour voir ce qui peut être nettoyé, exécutez la commande suivante dans ~/GitMigration/
Pour voir ce qui peut être nettoyé, exécutez la commande suivante dans ~/GitMigration/
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.
Résumé
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.
Partager cet article
Thème suivant
Lectures recommandées
Ajoutez ces ressources à vos favoris pour en savoir plus sur les types d'équipes DevOps, ou pour les mises à jour continues de DevOps chez Atlassian.