Come migrare una base di codice da un repo svn ad un'altra storia preservare?
-
23-09-2019 - |
Domanda
Ho un ramo in un repo svn mal strutturato che ha bisogno di essere messo a nudo fuori e si è trasferito ad un altro repository SVN. (Sto cercando di ripulirlo un po ').
Se faccio un svn log
e non fermo sulla copia / rinomina posso vedere tutto 3427 commit che mi interessa. C'è qualche modo per scaricare le revisioni fuori, a corto di scrivere alcuni importanti scritti?
Vorrei seguire i consigli in questa domanda ma questo ramo è stato spostato in tutto il luogo e vorrei preservare le mosse pure.
Soluzione
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 che cosa si intende fare, ma lottare con la copia / spostamento del ramo tutto il luogo? Una risposta a questa può essere trovata nella prima citato SVN Documentazione , credo:
Inoltre, percorsi copiati possono dare qualche guaio. Subversion supporta la copia operazioni nel repository, dove nuovo percorso viene creata copiando un po ' percorso già esistente. È possibile che ad un certo punto nel corso della vita di il repository, si potrebbe avere copiato un file o una directory da una certa posizione che svndumpfilter è escluso, ad un posizione che è compreso. Produrre i dati discarica autosufficiente, svndumpfilter bisogno di mostrare ancora il aggiunta del nuovo percorso, compreso il il contenuto di tutti i file creati dal copia-e non rappresentano che l'aggiunta come una copia da una fonte che non lo farà esistono nei dati di dettagli filtrati ruscello. Ma poiché il Subversion formato dump repository mostra solo ciò che è stato cambiato in ogni revisione, la contenuto della sorgente di copia non potrebbe essere prontamente disponibili. Se si sospetta che si dispone di tutte le copie di questo tipo nel repository, si potrebbe desiderare di ripensare il set di incluso / escluso percorsi, forse tra i sentieri che serviva come fonti di vostra le operazioni di copia fastidiosi, anche.
Significato: fare svndumpfilter
includono tutti percorsi ramo mai vissuto a. O mi sto perdendo qualcosa?
Un'altra possibilità potrebbe essere l'svndumpfilter2
citato da @compie nel thread si è collegato anche se credo che non è nemmeno necessario (e non so neanche di @compie o svndumpfilter2
).
Altri suggerimenti
Si vuole utilizzare una combinazione di:
- svnadmin dump
- svndumpfilter
- carico svnadmin
Se si vuole fare l'intero ramo, si può nemmeno bisogno svndumpfilter. Ma se si fa:
http: / /svnbook.red-bean.com/nightly/en/svn.reposadmin.maint.html#svn.reposadmin.maint.filtering
C'è un'altra soluzione che è piuttosto semplice e risolve il "preservare le mosse" problema. Si prega di consultare l'ultimo paragrafo della subversion FAQ ingresso "Come faccio a rimuovere completamente un file dalla cronologia del repository ? ". La soluzione non si basa sul svndumpfilter
.
È possibile effettuare le seguenti operazioni:
-
Configura percorso a base di autorizzazione regole per negare l'accesso in lettura per un USERNAME account per PERCORSI del file o una cartella che si desidera rimuovere dalla storia repository.
Si prega di notare il sostantivo plurale percorsi . Il file o la cartella che si desidera sbarazzarsi di potrebbe avere nomi diversi o può essere situato in luoghi diversi attraverso una storia repository. Si prega di prendere in considerazione questo quando si imposta regole di negazione.
-
Crea un repository vuoto,
-
Replicare repository di origine con
svnsync
strumento per il repository di destinazione in conto USERNAME . Per i dettagli sulla sincronizzazione repository consvnsync
consultare SVNBook capitolo "Repository replica" .
A differenza svndumpfilter
, svnsync
traduce automaticamente le operazioni svn copy
con un percorso di origine illeggibile in estensione normale, che è utile se la storia comporta operazioni di copia e deve ancora essere filtrato. :)
È necessario utilizzare hotcopy per il backup della directory di repository. Allora dovrebbe essere una questione di semplice ripristino del repository.