User Tools

Site Tools


development:forge:svn2git

Pour transférer un projet de SVN vers Gitlab, en conservant son historique

Membres du projet

Si vous avez plusieurs intervenants, il faut créer un fichier authors.txt de la forme : pnom = pnom <pnom>

On peut faire un script, et l’exécuter en étant dans le repository exporté de svn

cmercier@cluster-head:~/fileas$ more aut_gen.sh
authors=$(svn log | grep -e '^r' | awk 'BEGIN { FS = "|" } ; { print $2 }' | sort | uniq)
for author in ${authors}; do
  echo "${author} = ${author%@*} <${author}>";
done

Ca donne un fichier avec, par exemple

cmercier = cmercier <cmercier>

Si, au moment de l'export du dépôt SVN, vous tombez sur

Author: eric not defined in authors.txt file

ajoutez une ligne, eric = ebuchlin <ebuchlin>, et rm -rf tmp-dir, puis recommencer l'étape d'export

Le fait de créer ce fichier sert juste pour l'historique des modifications. Il faudra ajouter les différents intervenants au projet git final.

Créez votre projet sur gitlab

https://git.ias.u-psud.fr/projects/new

Lors de la création du projet, refusez la création du fichier README.md.

Export du projet SVN

Aller sur une machine avec une console shell, créer un répertoire temporaire, aller dedans

mkdir tmp; cd tmp

Dans ce répertoire, placez votre fichier authors.txt

Configurer les informations utilisateur pour git

(une seule fois si plusieurs projets sous le même login/machine)

git config --global user.name "Prenom Nom"
git config --global user.email "prenom.nom@ias.u-psud.fr"

Cloner le depot sous svn dans un depot local git

git svn  [--authors-file=authors.txt] clone https://svn.ias.u-psud.fr/PROJETSVN tmp-git

Si on vous répond que la commande svn n'existe pas, il faut installer le package git-svn de votre distribution

Renseigner le depot du nouveau projet (pnom, login IAS)

cd tmp-git
git remote add origin https://git.ias.u-psud.fr/pnom/project_name_choisi_etape2.git

Vérification:

cmercier@localhost tmp-git]$ git remote show origin
* distante origin
  URL de rapatriement : https://git.ias.u-psud.fr/cmercier/filaments.git
  URL push : https://git.ias.u-psud.fr/cmercier/filaments.git
  Branche HEAD : (inconnu)

Si jamais vous avez quand même créé un fichier README.md

[cmercier@localhost tmp-git]$ git remote show origin
* distante origin
  URL de rapatriement : https://git.ias.u-psud.fr/cmercier/planck_save.git
  URL push : https://git.ias.u-psud.fr/cmercier/planck_save.git
  Branche HEAD : master
  Branche distante :
    master nouveau (le prochain rapatriement (fetch) stockera dans remotes/origin)
  Référence locale configurée pour 'git push' :
    master pousse vers master (le local n'est pas à jour)
 Branche distante :
    master nouveau (le prochain rapatriement (fetch) stockera dans remotes/origin)
  Référence locale configurée pour 'git push' :
    master pousse vers master (le local n'est pas à jour)

Exécuter, pour se mettre à jour:

git pull origin master --allow-unrelated-histories

Envoyez les fichiers de votre copie locale vers gitlab

git push -u origin master
development/forge/svn2git.txt · Last modified: 2020/11/05 16:55 by stephane caminade