Close

Git convert: un passaggio della migrazione da SVN a Git

Il passaggio successivo della migrazione da SVN a Git consiste nell'importare i contenuti del repository SVN in un nuovo repository Git. Per farlo, useremo l'utilità git svn, inclusa nella maggior parte delle distribuzioni Git, e puliremo quindi i risultati con svn-migration-scripts.jar*.

Tieni presente che il processo di conversione può richiedere una notevole quantità di tempo per i repository più grandi, anche quando si effettua la clonazione da un repository SVN locale. Come standard di riferimento, ricorda che per completare la conversione di un repository da 400 MB con 33.000 commit sul branch principale sono state necessarie circa 12 ore.

Per i repository di dimensioni normali, devono essere eseguiti i seguenti passaggi sul computer locale del responsabile della migrazione. Tuttavia, se hai un repository SVN molto grande e vuoi ridurre i tempi di conversione, puoi eseguire git svn clone sul server SVN anziché sul computer locale del responsabile della migrazione per evitare il sovraccarico causato dalla clonazione tramite una connessione di rete.

*Nota che questi script sono stati scritti quando era disponibile solo la versione git 1.8.x. Pertanto, perché gli script funzionino, occorre utilizzare quella versione di git.


Clonare il repository SVN


Il comando git svn clone trasforma il trunk, i branch e i tag del repository SVN in un nuovo repository Git. Tale comando deve essere configurato diversamente a seconda della struttura del repository SVN.

Migrazione a Git: comando git svn clone
Database
materiale correlato

Come spostare un repository Git completo

Logo di Bitbucket
Scopri la soluzione

Impara a utilizzare Git con Bitbucket Cloud

Layout SVN standard

Se il progetto SVN usa il layout di directory /trunk, /branches e /tags standard, puoi utilizzare l'opzione --stdlayout invece di specificare manualmente la struttura del repository. Esegui il comando seguente nella directory ~/GitMigration:

git svn clone --stdlayout --authors-file=authors.txt
 <svn-repo>/<project> <git-repo-name>

Dove <svn-repo> è l'URI del repository SVN che desideri migrare, è il nome del progetto che desideri importare e è il nome della directory del nuovo repository Git.

Ad esempio, se stavi migrando un progetto chiamato Confluence, con host su https://svn.atlassian.com, è consigliabile eseguire quanto segue:

git svn clone --stdlayout --authors-file=authors.txt https://svn.atlassian.com/Confluence ConfluenceAsGit

Layout SVN non standard

Se il layout del repository SVN non è un layout standard, occorre specificare le posizioni del trunk, dei branch e dei tag usando le opzioni della riga di comando --trunk, --branches e --tags. Ad esempio, se ci sono dei branch archiviati sia nella directory /branches che nella directory /bugfixes, usa il seguente comando:

git svn clone --trunk=/trunk --branches=/branches 
 --branches=/bugfixes --tags=/tags --authors-file=authors.txt 
 <svn-repo>/<project> <git-repo-name>

Ispezionare il nuovo repository Git


Al termine di git svn clone (l'operazione potrebbe richiedere del tempo), troverai una nuova directory chiamata in ~/GitMigration. Questo è il repository Git convertito. Dovresti essere in grado di passare a ed eseguire uno qualsiasi dei comandi Git standard per esplorare il progetto.

I branch e i tag non vengono importati nel nuovo repository Git come ci si potrebbe aspettare. Non troverai nessuno dei branch SVN nell'output di git branch, né troverai nessuno dei tag SVN nell'output di git tag. Ma, se esegui git branch -r, troverai tutti i branch e i tag del repository SVN. Il comando git svn clone importa i branch SVN come branch remoti e importa i tag SVN come branch remoti con prefisso tags/.

Migrazione a Git: struttura del repository Git clonato

Questo comportamento semplifica alcune procedure di sincronizzazione bidirezionale, ma può creare molta confusione quando si tenta di effettuare una migrazione unidirezionale a Git. Ecco perché il prossimo passaggio sarà convertire questi branch remoti in branch locali e tag Git effettivi.

Pulire il nuovo repository Git


Lo script clean-git incluso in svn-migration-scripts.jar trasforma i branch SVN in branch Git locali e i tag SVN in tag Git completi. Nota che questa è un'operazione distruttiva e che non potrai rispostare i commit dal repository Git al repository SVN.

Se decidi di seguire questa guida alla migrazione, ciò non rappresenta un problema in quanto la guida consiglia di effettuare una sincronizzazione unidirezionale da SVN a Git (il repository Git è considerato di sola lettura fino a dopo la fase di migrazione). Tuttavia, se hai intenzione di eseguire commit nel repository Git e nel repository SVN durante il processo di migrazione, non è consigliabile eseguire i seguenti comandi. Si tratta di operazioni avanzate, non consigliate per i progetti standard.

Per vedere cosa può essere pulito, esegui il comando seguente in ~/GitMigration/:

java -Dfile.encoding=utf-8 -jar ~/svn-migration-scripts.jar clean-git

Restituisce come output tutte le modifiche che lo script vuole apportare, ma senza applicarne nessuna. Per eseguire queste modifiche, occorre usare l'opzione --force in questo modo:

java -Dfile.encoding=utf-8 -jar ~/svn-migration-scripts.jar clean-git --force

Ora dovresti vedere tutti i branch SVN nell'output di git branch, insieme ai tag SVN nell'output di git tag. Ciò significa che hai convertito correttamente il progetto SVN in un repository Git.

Riepilogo


In questo passaggio, hai trasformato un repository SVN in un nuovo repository Git con il comando git svn clone, quindi hai pulito la struttura del repository risultante con svn-migration-scripts.jar. Nel passaggio successivo, scoprirai come mantenere questo nuovo repository Git sincronizzato con qualsiasi nuovo commit nel repository SVN. È un processo simile a quello di conversione, ma ci sono alcune considerazioni importanti sul flusso di lavoro da tenere presente durante questo periodo di transizione.


Condividi l'articolo
Argomento successivo

Letture consigliate

Aggiungi ai preferiti queste risorse per ricevere informazioni sui tipi di team DevOps e aggiornamenti continui su DevOps in Atlassian.

Le persone collaborano utilizzando una parete piena di strumenti

Blog di Bitbucket

Illustrazione su Devops

Percorso di apprendimento DevOps

Funzione Demo Den per demo con esperti Atlassian

Come Bitbucket Cloud funziona con Atlassian Open DevOps

Iscriviti alla nostra newsletter DevOps

Thank you for signing up