giovedì 28 maggio 2026

SVN to GIT - Migrare un repository tra due version control

Tempo fa utilizzavo SVN per la gestione dei progetti. Comodo, veloce... ma per le mie capacità, avevo bisogno di un'interfaccia grafica. E usavo Tortoise.

Un mio amico mi ha convinto a provare GIT ed ora... sono passato quasi integralmente a GIT (con Github Desktop come interfaccia - che ho pure compilato sul laptop con linux).
Ok, mi sono ricreato un repository "self-hosted" così da evitare di usare GitHub, però il concetto è comunque lo stesso.

Il fatto è che non voglio perdermi i commit di ciò che ho fatto in SVN.

Ecco quindi una guida per migrare da SVN a GIT.

Nota: la guida funziona sia in ambiente linux che in ambiente windows.

Guida

Per prima cosa, va creata una directory di lavoro in cui operare.

Bisogna anche assicurarsi di avere GIT installato e configurato con l'utenza necessaria.

[step 1] creazione file authors.txt

La gestione delle utenze è leggermente differente, quindi bisogna indicare a GIT come associare la nuova utenza a quella che ha effettuato l'attività su SVN.

Bisogna specificare dentro un file ("authors.txt"), creato nella directory in cui si sta lavorando, la relazione tra l'username di SVN (a sinistra) e l'username GIT (a destra):

developer = Mario Rossi <m.rossi@example.com>

[step 2] clonazione progetto

A questo punto, bisogna clonare il progetto ricostruendo la struttura di GIT basata sui dati presenti in SVN.
Nota: al momento, la procedura funziona, ma questo tipo di attività sembra verrà dismessa in futuro (almeno, stando alla nota in giallo che appare richiamando il comando.

Bisogna aprire un prompt nella directory di lavoro.

Il comando per effettuare questa "migrazione" è:

$ git svn clone "https://svn.example.com/repos/project1/sourcecode/trunk/subdirectory" --authors-file=authors.txt --no-metadata --no-follow-parent ~/project1

Nota: questo è il comando per linux. Per eseguirlo su windows, basta modificare la directory di destinazione indicando il path relativo o assoluto.

Nota: è possibile specificare l'esatto percorso della directory da recuperare dentro SVN, senza infilare nel progetto tutte le altre directory superiori. Se non si inserisce il comando "--no-follow-parent", il sistema risalirà fino alla root e scaricherà (in modo versionato) tutto.

[step 3] creazione repository GIT

A questo punto, bisogna creare il repository in GIT.

E' fondamentale che il repository sia vuoto (niente README.md o .gitignore, quindi).

[step 4] accesso directory

A questo punto, si deve lanciare una sequenza di comandi per impostare correttamente il progetto e caricarlo su GIT.

Per prima cosa, accediamo da console alla directory appena creata:

$ cd project1

[step 5] aggiunta origin

A questo punto, è necessario aggiungere l'origin per fare il push:

$ git remote add origin http://git.example.com/username/project1

[step 6] cambiare da master a main

Quando si clona un repository in SVN, il branch utilizzato per default è "master". Se si vuole invece utilizzare main (ed anche per evitare problemi nel push), va usato questo comando:

$ git branch -m master main

[step 7] push su GIT

Ultimo passaggio da fare è quello di caricare il contenuto su GIT con questo comando:

$ git push -u origin main

A questo punto, si dovrebbe vedere il contenuto su GIT.

Ora è possibile aggiungere i file mancanti (README.md, .gitignore, etc) ed iniziare a lavorare al progetto.

Nessun commento:

Posta un commento