2012-10-22 13 views
7

Devo lavorare su due repository e voglio spostare una directory con il codice tra i due mantenendo la revisionhistory.SVN Sposta il codice con la cronologia tra due repository

Ho letto alcune domande qui su SO, ma non sono ancora sicuro su quale direzione andare. I nostri repository sono ENORME (file (orkingcopy) che non include revisioni> diversi GB), poiché tutto è archiviato (codice + designdata + ...).

Le soluzioni che ho visto finora sono:

  1. svnadmin discarica + filtro + importazione: non è un'opzione a causa delle dimensioni repository
  2. svnsync: Abbiamo già dati nel secondo repository (i repository sono già enormi, non credo che fonderli sia una buona idea, oltre a decidere che non è il mio lavoro), e da ciò che ho raccolto questo richiede che il secondo repository sia vuoto.
  3. Third Party Solution: si blocca ripetutamente, perché non può eliminare un file, perché "un altro hai processo il file aperto" (enevthough posso rimuovere il file tramite il sistema operativo, e viene creato dallo script)

Ci sono altre soluzioni, approcci a questo, o mi manca qualcosa su una delle soluzioni?

+1

Perché la prima opzione è un problema? È possibile passare il dump attraverso un filtro senza salvare in un file. –

+0

@DmitryPavlenko: considerando che il repository è di circa 20 Gb estratto ei numeri di revisione sono intorno a 6 cifre (112 xxx) al momento, il dump deve essere considerevolmente più grande. Scaricando il repository completo per spostare una directory di codice che è di un paio di meg di dimensione sembra eccessivo. Questo mette un sacco di stress inutile sul sistema (controlla ogni revisione/dump => "copia" 200G o molto altro (devi controllare la dimensione della repro) => esegui il filtro su 200G di Dati. Se pensi che questo run over network che è già in uso pesante inibisce il nostro flusso di lavoro – ted

+0

@DmitryPavlenko: In breve, non sono sicuro di avere 200G a mia disposizione (non un amministratore solo un utente), l'impatto della rete e il sovraccarico. voglio continuare a lavorare mentre questa quantità di dati viene spostata, ma cosa fa svn dump se ci sono accessi al repository nel frattempo? – ted

risposta

7

Il dump svnadmin + filtro + importazione funziona anche con repository di grandi dimensioni.

Ci sono alcune cose che devi fare per le prestazioni. Scopri quale revisione è stata quella che ha creato per prima la cartella che vuoi copiare. Quindi controlla il log per trovare l'ultima revisione che ha modificato qualcosa in quella cartella. Hai solo bisogno di scaricare le revisioni in quell'intervallo.

Utilizzare il flag --incremental su svndump.

Non provare a utilizzare il flag Deltas con SVN Dump. SvnDumpFilter non funzionerà con i dump creati con "delta". Non tentare di salvare l'enorme dump su un file ed eseguire SvnDumpFilter sul file. Invece fallo in un solo passaggio con una pipa.

Se la revisione partenza è stata 10000 e la vostra revisione fine era 20000 e il percorso che si desidera copiare era progetti/fonte, il comando dovrebbe essere simile a

svnadmin dump --incremental -r10000:20000 YourRepoPath | svndumpfilter include projects/source --drop-empty-revs --renumber-revs > source.dump 

seguito da un comando di carico svnadmin per caricare il dump nel tuo altro repository.

+0

Posso farlo con il repository in linea? Dopotutto, limito l'ultima revisione. – ted

+0

Sì, è possibile eseguire il dump e caricare con il repository on-line. – maddoxej

Problemi correlati