Synchronize Git repositories
È molto semplice sincronizzare il tuo repository Git con i nuovi commit nell'archivio SVN originale. Questo ti permette di avere un periodo di transizione comodo nel processo di migrazione in cui puoi continuare a utilizzare il tuo flusso di lavoro SVN esistente, ma iniziare a sperimentare con Git.
È possibile la sincronizzazione in entrambe le direzioni. Tuttavia, consigliamo una sincronizzazione unidirezionale da SVN a Git. Durante il tuo periodo di transizione, dovresti impegnarti solo nel tuo repository SVN, non nel tuo repository Git. Una volta che sarai sicuro che il tuo team sia pronto a effettuare il passaggio, puoi completare il processo di migrazione e iniziare ad apportare modifiche con Git anziché SVN.
Nel frattempo, dovresti continuare a impegnarti nel tuo archivio SVN e sincronizzare il tuo repository Git ogni volta che è necessario. Questo processo è simile alla fase di conversione, ma poiché ti occupi solo di modifiche incrementali, dovrebbe essere molto più efficiente.
Aggiornare il file degli autori
Il file authors.txt
che abbiamo usato per mappare i nomi utente SVN ai nomi completi e agli indirizzi e-mail è essenziale per il processo di sincronizzazione. Se è stato spostato dalla posizione ~/GitMigration/authors.txt
che abbiamo utilizzato finora, dovrai aggiornarne la posizione con:
git config svn.authorsfile
Se nuovi sviluppatori si sono trasferiti nel repository SVN dall'ultima sincronizzazione (o dal clone iniziale), il file degli autori deve essere aggiornato di conseguenza. Puoi farlo aggiungendo manualmente nuovi utenti al file authors.txt
oppure puoi usare l'opzione --authors-prog
, come discusso nella sezione successiva.
Per le sincronizzazioni una tantum è spesso più facile modificare direttamente il file dell'autore; tuttavia, l'opzione --authors-prog
è preferibile se si eseguono sincronizzazioni senza supervisione (ad esempio in una task pianificata).
materiale correlato
Come spostare un repository Git completo
Scopri la soluzione
Impara a utilizzare Git con Bitbucket Cloud
Generazione automatica di autori Git
Se il tuo file d'autore non ha bisogno di essere aggiornato, puoi passare alla sezione successiva.
Il comando git svn
include un'opzione chiamata --authors-prog
, che punta a uno script che trasforma automaticamente i nomi utente SVN in autori Git. Dovrai configurare questo script per accettare il nome utente SVN come unico argomento e restituire una singola riga sotto forma di Nome
(proprio come il lato destro del file degli autori esistente). Questa opzione può essere molto utile se devi aggiungere periodicamente nuovi sviluppatori al tuo progetto.
Se vuoi usare l'opzione --authors-prog
, crea un file chiamato opzione authors.sh
in ~/GitMigration
. Aggiungi la riga seguente a authors.sh
per restituire un nome Git e un indirizzo e-mail fittizi per tutti gli autori che non si trovano in authors.txt
:
echo "$1 <$1@example.com>"
Lo ripetiamo, questo genererà solo un nome e un'e-mail fittizi basati sul nome utente SVN, quindi sentiti libero di modificarlo se puoi fornire una mappatura più significativa.
Recuperare i nuovi commit SVN
A differenza di SVN, Git fa una distinzione tra il download di commit upstream e l'integrazione nel progetto. Il primo si chiama "recupero", mentre il secondo può essere eseguito tramite merge o rebasing. Nella directory ~/GitMigration
, esegui il seguente comando per recuperare qualsiasi nuovo commit dal repository SVN originale.
git svn fetch
È simile al comando git svn clone
della fase precedente in quanto aggiorna solo i branch remoti del repository Git. I branch locali non rifletteranno ancora nessuno degli aggiornamenti. I tuoi branch remoti, d'altra parte, dovrebbero corrispondere esattamente alla cronologia del tuo repository SVN.
Se stai usando l'opzione --authors-prog
, devi includerla nel comando precedente, in questo modo:
git svn fetch --authors-prog=authors.sh
Sincronizzare con i commit recuperati
Per applicare i commit scaricati al repository, esegui il seguente comando:
java -Dfile.encoding=utf-8 -jar ~/svn-migration-scripts.jar sync-rebase
Questo effettuerà il rebase dei commit recuperati sui tuoi branch locali in modo che corrispondano alle loro controparti remote. Ora dovresti essere in grado di vedere i nuovi commit nell'output del tuo log Git
.
Pulire il repository Git (di nuovo)
È anche una buona idea eseguire nuovamente lo script git-clean
per rimuovere eventuali tag o branch obsoleti che sono stati eliminati dal repository SVN originale dopo l'ultima sincronizzazione:
java -Dfile.encoding=utf-8 -jar ~/svn-migration-scripts.jar clean-git --force
Il tuo repository Git locale dovrebbe ora essere sincronizzato con il tuo archivio SVN.
Riepilogo
Durante questo periodo di transizione, è molto importante che i tuoi sviluppatori si impegnino solo nel repository SVN originale. L'unica volta in cui il repository Git deve essere aggiornato è tramite il processo di sincronizzazione discusso sopra. È molto più semplice della gestione di un flusso di lavoro di sincronizzazione bidirezionale, ma ti consente comunque di iniziare a integrare Git nel tuo processo di build.
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.