Conversione di un repository di subversion remoto molto grande in un repository Git ridotto

5

Ho il piacere di acquisire repository di subversion di 14 anni che consiste di due elementi chiave:

  1. 111.000 revisioni, di cui circa il 10% è sostanziale;
  2. Il dump del repository è di circa 73 GB, a causa di un numero elevato di file di dati binari che sono stati aggiornati, aggiunti e modificati nel corso degli anni.

Ecco cosa mi piacerebbe fare, ma non sono sicuro che sia possibile: vorrei rimuovere la cronologia dei file binari e mantenere solo le modifiche al codice. Quindi convertilo in git. Quali sono i tuoi consigli?

    
posta Ben 03.05.2018 - 21:13
fonte

2 risposte

4

not sure if it's possible: I'd like to strip the history of the binary files, only keeping the code changes. Then convert that to git.

Non l'ho provato da solo, ma sono sicuro che questo è possibile quando ti avvicini all'attività esattamente nell'ordine che hai descritto sopra:

  1. elimina la cronologia dei file binari, mantenendo solo le modifiche al codice, in SVN prima

  2. migrare a Git in seguito .

Il passaggio 1 può essere compiuto spostando i file binari con la loro cronologia in una cartella temporanea (all'interno del repository, ad esempio con svn move ). Poi ne crei una nuova copia nella directory di lavoro locale dei tuoi progetti e li controlli come se fossero nuovi file - quindi quei nuovi file non hanno cronologia. Quindi usi la procedura descritta in questa domanda di errore del server per sbarazzarti della cartella temporanea (utilizzando svnadmin dump , svndumpfilter , svnadmin load ), che elimina la cronologia completa.

Nota in questo modo ogni volta che verificherai una revisione più vecchia del progetto, i file binari mancheranno completamente. Per evitare che questo diventi un problema, considera la strategia di mantenere online il vecchio repository SVN, come suggerito da @RobertHarvey.

    
risposta data 03.05.2018 - 22:31
fonte
3

OP qui. Per i posteri, volevo aggiungere quale fosse la mia ultima soluzione a questo problema. Terrò la migliore risposta verificata, perché è in realtà la migliore risposta quando le cose vanno senza problemi.

Per prima cosa ho provato la risposta selezionata da Doc Brown: link

Ma il comando svnadmin dump non è riuscito a circa metà del dump (circa 1 giorno nel dump), con una revisione corrotta. Questo è stato un punto coerente di fallimento. Tentando di ignorare questo riferimento specifico, attraverso l'uso attento dei flag di revisione su svnadmin dump, sono stato in grado di produrre un dump completo, tuttavia, i tentativi di filtrare i file binari dal file di dump di 73 GB sono stati riscontrati con ulteriore frustrazione. Sono riuscito a fare alcune discariche di particolari rami, ma questo era inutile per me per una migrazione completa.

In definitiva, ho finito per usare git-svn per fare questo: nohup git svn init https://myurl.com/projects/myproject/ --no-minimize-url --no-metadata --stdlayout &

L'utilizzo di git-svn su un repository di tale entità non era privo di problemi. Si è soffocato regolarmente durante l'elaborazione. Fortunatamente, è possibile emettere git svn fetch per riprendere la conversione a ogni punto di arresto. Ho scritto un piccolo script wrapper che continuava a emettere il comando in caso di errore.

Detto questo, git-svn è non raccomandato per questa attività, consulta questo articolo: link

Ma in fin dei conti questo era l'unico strumento in grado di mettermi al lavoro. Per rimuovere i file binari, ho utilizzato il pulitore di documenti BFG link

    
risposta data 26.09.2018 - 17:54
fonte

Leggi altre domande sui tag