Skip to main content

Importation d’un dépôt Subversion

Vous pouvez importer un dépôt de Subversion en le convertissant en dépôt Git, puis en poussant le dépôt Git vers GitHub.

Prérequis

Pour suivre ces étapes, vous devez utiliser un système macOS ou Linux et avoir les outils suivants installés :

Importation d’un dépôt Subversion

  1. Créez un référentiel dans GitHub. Pour éviter les erreurs, n’initialisez pas le nouveau dépôt avec le fichier README, la licence ou les fichiers gitignore. Vous pouvez ajouter ces fichiers une fois que votre projet a été poussé vers GitHub. Pour plus d’informations, consultez « Création d’un dépôt ».

  2. Pour vérifier que Git est installé sur votre ordinateur, exécutez git --version.

    La sortie devrait ressembler à git version 2.40.0.

  3. Pour vérifier que git svn est disponible sur votre ordinateur, exécutez git svn --version.

    La sortie devrait ressembler à git-svn version 2.40.0 (svn 1.14.2).

    Si vous pouvez exécuter git correctement, mais que vous rencontrez une erreur lors de l’exécution de git svn, vous devrez peut-être installer git svn séparément. Nous vous recommandons d’utiliser Homebrew ou le registre de packages Ubuntu, lesquels incluent les packages git-svn.

  4. Pour vérifier que Git LFS est installé sur votre ordinateur, exécutez git lfs --version.

    La sortie devrait ressembler à git-lfs/3.1.4 (GitHub; darwin arm64; go 1.18.1).

  5. Extrayez votre dépôt Subversion.

    Par exemple, pour extraire le projet open source Logisim de Sourceforge, exécutez svn checkout https://svn.code.sf.net/p/circuit/code/trunk.

  6. Accédez au répertoire de votre dépôt Subversion.

  7. Pour obtenir la liste des auteurs dans votre projet Subversion et stocker la liste dans authors.txt, exécutez le script suivant :

    Shell
    svn log -q | grep -e '^r' | awk 'BEGIN { FS = "|" } ; { print $2" = "$2 }' | sed 's/^[ \t]*//' | sort | uniq > authors.txt
    
  8. Mettez à jour votre fichier authors.txt, en mappant le nom de l’auteur utilisé dans le dépôt Subversion au nom que vous souhaitez utiliser dans votre dépôt Git, au format suivant :

    octocat = The Octocat <octocat@github.com>
    
  9. Pour convertir votre dépôt Subversion en dépôt Git, utilisez git svn.

    • Si votre dépôt Subversion a un format standard, avec les dossiers « trunk », « branches » et « tags », exécutez git svn clone -s URL PATH/TO/DESTINATION --authors-file PATH/TO/AUTHORS.TXT, en remplaçant URL par l’URL du dépôt Subversion, PATH/TO/DESTINATION par le chemin du répertoire dans lequel vous souhaitez cloner le dépôt et PATH/TO/AUTHORS.TXT par le chemin de votre fichier authors.txt.

      Par exemple, pour cloner le projet Logisim depuis Sourceforge dans un répertoire appelé logisim, exécutez git svn clone -s https://svn.code.sf.net/p/circuit/code logisim --authors-file path/to/authors.txt.

    • Si votre dépôt Subversion n’est pas standard, vous pouvez personnaliser git svn pour gérer votre dépôt. Pour plus d’informations, consultez git-svn dans la documentation Git.

  10. Git extrait chaque révision SVN et la transforme en commit Git. Si votre dépôt a de nombreux fichiers ou un long historique, ce processus prendra beaucoup de temps.

    Pour les grands dépôts, la commande peut se bloquer. Si c’est le cas, vous pouvez reprendre là où vous vous êtes arrêté en mettant fin à la commande avec Ctrl+C, en vous déplaçant vers votre nouveau répertoire, puis en exécutant git svn fetch.

  11. Accédez au répertoire du dépôt Git nouvellement créé.

  12. Pour ajouter votre dépôt GitHub en tant que dépôt distant, exécutez git remote add origin URL, en remplaçant URL par l’URL du dépôt GitHub que vous avez créée précédemment, par exemple https://github.com/octocat/example-repository.git.

  13. Pour envoyer le dépôt sur GitHub, exécutez git push --mirror origin.

    Si votre dépôt contient des fichiers dont la taille est supérieure à la limite de taille de fichier de GitHub, votre poussée peut échouer. Déplacez les gros fichiers vers Git LFS en exécutant git lfs import, puis réessayez.

Pour aller plus loin