Skip to content

Instantly share code, notes, and snippets.

@ratibus
Created November 14, 2012 16:20
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ratibus/4073080 to your computer and use it in GitHub Desktop.
Save ratibus/4073080 to your computer and use it in GitHub Desktop.
Migration SVN -> Git
# Récupération des committers
$ svn log --xml svn_repository | grep author | sort -u | sed 's/.*>\(.*\)<.*/\1/g'
Mise en forme pour créer un fichier users.txt avec le format suivant :
schacon = Scott Chacon <schacon@geemail.com>
# On clone le dépôt SVN avec Git
$ git svn clone http://srv-tux1/svn/urgbox/site --authors-file=../authors.txt --no-metadata -s dpu
# migration des svn:ignore (à faire sur toutes les branches sur lesquelles on risque de travailler)
$ git svn show-ignore -i trunk > .gitignore
Puis on retravaille certaines lignes pour les mettre dans des fichiers dédiés
# On migre proprement les tags
$ cp -Rf .git/refs/remotes/tags/* .git/refs/tags/
$ rm -Rf .git/refs/remotes/tags
Pour éviter les ambiguités avec les noms de branches, renommer les tags en les préfixant par v (si besoin)
$ find .git/refs/tags/ -type f | sed 's#\.git/refs/tags/\(.*\)#mv .git/refs/tags/\1 .git/refs/tags/v\1#' | bash
# On migre les branches
$ cp -Rf .git/refs/remotes/* .git/refs/heads/
$ rm -Rf .git/refs/remotes
# Gestion des répertoires vides (à faire sur tous les tags/branches avec lesquels on va bosser)
Récupérer les répertoires vides avec un export svn
Il va falloir ajouter un fichier .gitignore vide dans ces dossiers
$ find -type d -empty | sed 's#\(.*\)# mkdir -p \1; touch \1/.gitignore#'
Bien ajouter les fichiers avec un "git add -f" car des fichiers peuvent être ignorés avec des .gitignore ajoutés
# On ajoute le serveur de prod Git en remote
$ git remote add origin git@my-git-server:myrepository.git
# On push tous les éléments
$ git push origin --all
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment