Sincronizzare i repository Git
ร 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.authorsfileSe 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).
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 <e-mail> (proprio come il lato destro del file degli autori esistente). Questa opzione puรฒ essere molto utile se devi aggiungere periodicamente nuovi sviluppatori al 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.shSincronizzare 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-rebaseQuesto 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 --forceIl 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.