SubGit (vs Blue Screen of Death)
subgit import --svn-url url://svn.serv/Bla/Bla directory/path/Local.git.Repo
È tutto.
+ Per aggiornare da SVN, un repository Git creato dal primo comando.
subgit import directory/path/Local.git.Repo
Ho usato un modo per migrare su Git all'istante per un enorme repository.
Naturalmente hai bisogno di un po 'di preparazione.
Ma potresti non interrompere affatto il processo di sviluppo.
Ecco la mia strada
La mia soluzione è simile a:
- Migrare SVN in un repository Git
- Aggiorna il repository Git poco prima di passare al team .
La migrazione richiede molto tempo per un grande repository SVN.
Ma l'aggiornamento della migrazione completata in pochi secondi.
Certo che sto usando SubGit , mamma. git-svn mi rende Blue Screen of Death . Solo costantemente. E git-svn mi annoia con l' errore fatale " nome file troppo lungo " di Git .
PASSI
1. Scarica SubGit
2. Preparare i comandi di migrazione e aggiornamento.
Diciamo che lo facciamo per Windows (è banale eseguire il port su Linux).
Nella directory bin di installazione di un SubGit (subgit-2.XX \ bin), creare due file .bat.
Contenuto di un file / comando per la migrazione:
start subgit import --svn-url url://svn.serv/Bla/Bla directory/path/Local.git.Repo
Il comando "start" è facoltativo qui (Windows). Permetterà di vedere gli errori all'avvio e di lasciare aperta una shell dopo il completamento di SubGit.
È possibile aggiungere qui parametri aggiuntivi simili a git-svn . Sto usando solo --default-domain myCompanyDomain.com per correggere il dominio dell'indirizzo email degli autori SVN.
Ho la struttura standard del repository SVN (trunk / rami / tag) e non abbiamo avuto problemi con la "mappatura degli autori". Quindi non sto più facendo niente.
(Se vuoi migrare tag come branch o il tuo SVN ha più cartelle branch / tags che potresti prendere in considerazione per usare l' approccio SubGit più dettagliato )
Suggerimento 1 : Usa --minimal-revision YourSvnRevNumber per vedere velocemente come vanno le cose (una specie di debug). Particolarmente utile è vedere i nomi degli autori risolti o le e-mail.
O per limitare la profondità della cronologia delle migrazioni.
Suggerimento 2 : la migrazione potrebbe essere interrotta ( Ctrl+ C) e ripristinata eseguendo il comando / file di aggiornamento successivo.
Non consiglio di farlo per grandi repository. Ho ricevuto "Eccezione memoria Java + Windows esaurita".
Suggerimento 3 : Meglio creare una copia del repository nudo dei risultati.
Contenuto di un file / comando per l'aggiornamento:
start subgit import directory/path/Local.git.Repo
Puoi eseguirlo tutte le volte che vuoi ottenere gli ultimi commit della squadra nel tuo repository Git.
Avvertimento! Non toccare il tuo repository nudo (creazione di rami ad esempio).
Prenderai il prossimo errore fatale:
Errore irreversibile: non sono sincronizzati e non possono essere sincronizzati ... La traduzione delle revisioni di Subversion in Git impegna ...
3. Esegui il primo comando / file. Ci vorrà molto tempo per un grande repository. 30 ore per il mio umile repository.
È tutto.
Puoi aggiornare il tuo repository Git da SVN in qualsiasi momento in qualsiasi momento eseguendo il secondo file / comando. E prima di passare il tuo team di sviluppo a Git.
Ci vorranno solo pochi secondi.
C'è un altro compito utile.
Sposta il tuo repository Git locale in un repository Git remoto
È il tuo caso? Procediamo
- Configura i tuoi telecomandi
Correre:
$ git remote add origin url://your/repo.git
- Preparati all'invio iniziale del tuo enorme repository Git locale a un repository remoto
Di default il tuo Git non può inviare grossi pezzi.
fatale: l'estremità remota ha riattaccato inaspettatamente
Corriamo per questo:
git config --global http.postBuffer 1073741824
524288000-500 MB 1073741824-1 GB, ecc.
Risolvi i problemi del certificato locale . Se il tuo server git utilizza un certificato non funzionante.
Ho disabilitato i certificati .
Inoltre, il tuo server Git potrebbe avere delle limitazioni sull'importo della richiesta che devono essere corrette .
- Invia tutta la migrazione al repository Git remoto del team.
Esegui con un Git locale:
git push origin --mirror
( git push origin '*: *' per le vecchie versioni di Git)
Se ricevi quanto segue: errore: impossibile generare git: nessun file o directory simile ... Per me la ricreazione completa del mio repository risolve questo errore (30 ore). Puoi provare i comandi successivi
git push origin --all
git push origin --tags
Oppure prova a reinstallare Git ( inutile per me ). Oppure puoi creare rami da tutti i tuoi tag e spingerli. Oppure, o, o ...