2010-03-29 9 views
6

Ho un ramo in un repository svn mal strutturato che deve essere rimosso e spostato in un altro repository svn. (Sto cercando di ripulirlo).Come migrare un codebase da un repository SVN ad un'altra cronologia di conservazione?

Se faccio un svn log e non stop su copia/rinomina Posso vedere tutti i 3427 commit che mi interessano. C'è un modo per scaricare le revisioni, a meno di scrivere alcuni script importanti?

Vorrei seguire il consiglio in this question ma questo ramo è stato spostato dappertutto e vorrei conservare anche le mosse.

+3

Ho fatto domande simili e 'svndumpfilter' era sempre la risposta standard. Sei sicuro che non lo taglierà per te? –

+0

Beh, potrei usare svndumpfilter, ma penso che dovrò fare almeno 9 rinominazioni di percorso nei punti del dump. Non sapevo se esistesse una soluzione automatizzata. (Il repository è troppo incasinato per usare git-svn). – chotchki

+0

Perché non importare le revisioni così come sono e rinominarle in sovversione? Non è necessario riscrivere la cronologia? –

risposta

2

Credo che questo potrebbe essere simile a quello che @ZacThompson (e @Pekka) significano: Penso svndumpfilter è tuo amico.

Dalla tua domanda, penso che tu abbia l'idea di cosa si debba fare, ma di lottare con la copia/lo spostamento del ramo dappertutto? Una risposta a questa può essere trovata nella prima citato SVN Documentation, credo:

Inoltre, i percorsi copiati possono dare qualche guai. Subversion supporta le operazioni di copia nel repository, dove viene creato un nuovo percorso copiando il percorso già esistente . È possibile che a un certo punto della durata di il repository, si potrebbe aver copiato un file o una directory da qualche posizione che svndumpfilter è escluso, in una posizione che è incluso. Per rendere dati di dettaglio autosufficienti, svndumpfilter ha bisogno di mostrare ancora la aggiunta del nuovo percorso, tra cui le contenuto dei file creati dal copia e non rappresentano che l'aggiunta come una copia da una fonte che non lo sarà nello stream di dati filtrato stream. Tuttavia, poiché il formato di dump di repository di Subversion mostra solo ciò che è stato modificato in ciascuna revisione, il contenuto di dell'origine di copia potrebbe non essere disponibile immediatamente . Se si sospetta che avete tutte le copie di questo tipo nel repository, si potrebbe desiderare di ripensare il set di incluso/escluso percorsi, tra cui forse i sentieri che fungevano da fonti di vostri operazioni di copia fastidiosi, anche.

Significato: fare svndumpfilter includono tutti percorsi ramo mai vissuto a. O mi sta sfuggendo qualcosa?

Un'altra possibilità potrebbe essere il svndumpfilter2 menzionato da @compie nella discussione che hai collegato anche se ritengo che non sia nemmeno necessario (e non conosco né @compie né svndumpfilter2).

+0

Non sapevo di svndumpfilter2 ma sembra essere quello che sto cercando. Ho intenzione di provarlo e vedere come funziona. – chotchki

+0

Non ho ancora terminato il mio sforzo di migrazione (enorme repo 30k + commit) ma questo metodo sembra promettente. – chotchki

-2

È necessario utilizzare HotCopy per eseguire il backup della directory del repository. Quindi dovrebbe essere solo questione di ripristinare il repository.

+1

Penso che stia parlando di spogliare una struttura molto complessa (con diverse mosse al suo interno) da un repository che contiene molto di più. –

+0

Non è possibile utilizzare hotcopy per questo, che può essere utilizzato solo per fare copie complete dei repository –

0

C'è un'altra soluzione che è piuttosto semplice e risolve il problema "preservare le mosse". Si prega di consultare l'ultimo paragrafo delle domande frequenti su Apache Subversion "How do I completely remove a file from the repository's history?". La soluzione non si basa sullo svndumpfilter.

È possibile effettuare le seguenti operazioni:

  1. Configura path-based authorization regole per negano accesso in lettura per un conto nome utente al SENTIERI del file o una cartella che si desidera rimuovere dal repository storia.

    Si prega di notare il nome plurale percorsi. Il file o la cartella di cui vuoi liberarti potrebbero avere nomi diversi o possono trovarsi in posti diversi attraverso la cronologia di un repository. Ti preghiamo di tenerlo presente quando imposti le regole di negazione.

  2. Creare un repository vuoto,

  3. replicare il repository di origine con svnsync strumento per repository di destinazione nella voce USERNAME. Per dettagli sulla sincronizzazione del repository con svnsync, fare riferimento al capitolo "Repository Replication" di SVNBook.

differenza svndumpfilter, svnsync traduce automaticamente svn copy operazioni con un percorso di origine illeggibile in estensione normale, che è utile se la storia comporta operazioni di copia e deve ancora essere filtrato. :)

Problemi correlati