Migrar repositoris de svn a GitLab

Organització

Ara tenim els diferents paquets que formen un projecte organitzats en diferents repositoris, i amb la estructura de base del subversion, de manera que típicament tenim:

+ nomrepositori
|
+--+ trunk
|  |
|  +- nompaquet1
|  +- nompaquet2
|
|- tags
|
+- branches

i a dins del trunk tots els paquets. això ens dona la estructura “fixa” nomrepositori/trunk/nompaquet, que sumat a la url base ens dona:

https://devel.upcnet.es/svn/nomrepositori/trunk/nompaquet

Amb el git, ens oblidem de tota aquesta palla, ja que el tema del trunk/branches ho farem amb els mètodes natius que ja ens ofereix el sistema git. Per tant la nova estructura que donarem als projectes i paquets seguirà les següens directives:

  • Tots els paquets estaran al mateix lloc, que serà l’arrel del git, per tant tots els paquets estaran sota el mateix patró de urls:

    https://git.upcnet.es/nompaquet

o si hi accedim amb les claus ssh:

git@git.upcnet.es:nompaquet.git
  • Per organitzar els paquets, es faran grups, però que aquests no afecten a les urls que acavem de dir, simplement es per tenir-ho ordenat, i mantenir un cert sabor a com estava organitzat avans. Aquests grups es poden fer i desfer que no afecten a les urls. Exemple, si avans teniem:

    https://devel.upcnet.es/svn/intranetupcnet/trunk/upcnet.intranet
    https://devel.upcnet.es/svn/intranetupcnet/trunk/upcnet.intranettheme

ara passarem a tenir:

https://git.upcnet.es/upcnet.intranet
https://git.upcnet.es/upcnet.intranettheme

i un grup al qual podrem accedir desde:

https://git.upcnet.es/groups/intranetupcnet

Nomenclatura i organització pels buildouts

Ara soliem tenir un paquet de buildout per cada projecte, dins el repositori del projecte, que feiem servir com a buildout de desenvolupament, i apart, els buildouts utilitzats a produccio, els teniem en el repositori deployment, organitzats per maquines, per exemple, el buildout de la intranet upcnet es trobava a:

https://devel.upcnet.es/svn/deployment/situla/trunk/intranetUPCnet

A partir d’ara, continuarem tenint un paquet per devel i un per produccio, però indicant en el nom si es de devel o de produccio de la seguent manera:

intranetupcnet.buildout.devel
intranetupcnet.buildout.deploy

i els guardarem en el grup que correspongui al projecte. Seguint amb l’exemple, el grup del projecte de la intranet upcnet, es quedaria amb els següents paquets a dins:

https://git.upcnet.es/upcnet.intranet
https://git.upcnet.es/upcnet.intranettheme
https://git.upcnet.es/intranetupcnet.buildout.devel
https://git.upcnet.es/intranetupcnet.buildout.deploy

Com que un repositori el podem tenir en més d’un grup a la vegada, els repositoris de deploy els organitzarem en grups segons la maquina on esta el projecte en producció, fent servir la nomenclatura:

host.deploy

on host sera el nom de la maquina sense posar el .upc.edu o .upc.es D’aquesta manera sera fàcil fer un llistat de tots els grups de maquines en producció, o bé buscar una maquina concreta.

Passos per migrar

  • Desde colladaverda, executar el migrador per cada un dels paquets que volem migrar indicant url del repositori, grup(s) on posarem el paquet importat i nom alternatiu (opcional) en cas que volguem renombrar el paquet:

    svn2gitlab https://devel.upcnet.es/svn/xxxxxxxxxxx grup1,grup2 nom_alternatiu
  • Els grups estaran separats per comes, sense espais, i en cas de no voler posar cap grup, posarem un guio (-)
  • Si no volem cambiar el nom del paquet, no cal que passem l’últim paràmetre
  • Un exemple amb totes les opcions possibles:

    root@colladaverda:~# svn2gitlab https://devel.upcnet.es/svn/deployment/situla/trunk/intranetUPCnet intranetupcnet,situla.deploy intranetupcnet.buildout.deploy
    
       Subversion to GitLab Migrator 1.0
       ---------------------------------
    
     > Checking out https://devel.upcnet.es/svn/deployment/situla/trunk/intranetUPCnet \
     > Searching svn commiters for intranetUPCnet
        · Found 3 unique commiters
     > Cloning intranetUPCnet as local GIT repository /
     > Creating new GIT repository at https://git.upcnet.es/intranetupcnet.buildout.deploy.git
     > Pushing Repository.
     > Marking Subversion repo as MOVED
     Creating group "intranetupcnet"
     Adding intranetupcnet.buildout.deploy to group "intranetupcnet"
     Creating group "situla.deploy"
     Adding intranetupcnet.buildout.deploy to group "situla.deploy"
     > Applying security settings
        · Added victor.fernandez to intranetupcnet.buildout.deploy developers team
        · Added roberto.diaz to intranetupcnet.buildout.deploy developers team
        · Added carles.bruguera to intranetupcnet.buildout.deploy developers team
  • El repositori subversion antic, un cop l’script a fet push al nou git, queda marcat amb un arxiu:

    ____MOVED____TO____GITLAB.txt
    

perque quedi clar que aquell subversion ja esta obsolet. A dins de l’arxiu, queda registrada la ubicació de nou repositori.

  • L’ultim pas del migrador es donar permisos a tothom qui ha comitejat alguna vegada. Si algu dels que intenta donar permisos no ha entrat mai al gitlab, ens avisarà i si s’escau que és algú que encara treballa aqui, doncs li demanarem amablement que es logueigi, per poder tornar a executar la comanda exactament amb els mateixos paràmetres perque afegeixi aquestes persones.

Adaptar buildouts

Un cop migrats els buildouts de devel, recordeu que els haureu d’adaptar per fer servir els nous repositoris:

  • Instalarem el mr.developer en el nostre buildout.cfg:

    [buildout]
    
    extensions = mr.developer
    auto-checkout = *
  • Afegirem tots els paquets que hem de incloure com a development, tant si son git com si queda algun subversion:

    [sources]
    
    nom.paquet = git git@git.upcnet.es:nom.paquet.git
    nom.paquet2 = svn https://xxxxxxxx
  • En cas que el buildout utilitzes externals per obtenir els paquets i descarregar-los a la carpeta src, la migració ja s’haurà encarregat d’eliminar les referencies, de totes maneres, millor esborrar el arxius EXTERNALS.txt de la carpeta src en cas que hi sigui.

Project Versions

Table Of Contents

Previous topic

Migrar repositoris Git a GitLab

Next topic

Error ‘No blob file’ al recatalogar

This Page