Git convert: A step in migration from SVN to 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.
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.
materiale correlato
Come spostare un repository Git completo
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,
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 ~/GitMigration
. Questo è il repository Git convertito. Dovresti essere in grado di passare a
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/
.
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.