Domanda

Sto convertendo dal repository CVS esistente al repository SVN.Il repository CVS ha pochi rami e vorrei rinominarli durante la conversione.

La conversione desiderata è così:

CVS branch         SVN branch
HEAD       ->      branches/branchX
branchA    ->      trunk
branchB    ->      branches/branchB
branchC    ->      branches/branchC

Cioè, CVS HEAD diventa un ramo normale e CVS branchA diventa un trunk SVN.

Entrambi i repository CVS e SVN saranno sulla stessa macchina Linux.

Come è possibile farlo?

Potrebbe essere sufficiente anche la conversione in cui il ramo CVS A diventa trunk SVN e tutti gli altri rami CVS vengono ignorati.

È stato utile?

Soluzione

Sono particolarmente interessato a preservare la cronologia dei commit. Se rinominerò e spostassi i rami in SVN dopo la conversione, la cronologia verrà conservata?

Sì. Subversion tiene inoltre traccia delle modifiche alla struttura della directory e tutta la cronologia delle versioni viene mantenuta anche se un file viene spostato nella struttura.

Consiglio di convertire il repository con cvs2svn , inclusi rami e tag. Una volta che il repository è in Subversion, puoi spostare i rami e i tag come desideri. Ciò mantiene anche la cronologia degli attuali tag e rami che vengono rinominati, il che potrebbe essere interessante in un contesto storico in seguito.

Altri suggerimenti

È passato un po 'di tempo da quando ho fatto un CVS - > Conversione SVN, e probabilmente anche più da quando ne ho fatto uno con una struttura di rami non banale. Poiché SVN può spostarsi abbastanza facilmente negli alberi delle directory, è possibile prima eseguire l'intera conversione, quindi riordinare la struttura trunk / branch interamente all'interno di SVN in seguito.

Se si arriva a quel punto e ci si sposta su interi alberi di directory all'interno di SVN, probabilmente è meglio se si esegue il commit dopo ogni passaggio di ridenominazione / spostamento dell'albero. Solo qualcosa da tenere a mente.

I rami di Subversion sono directory, quindi puoi semplicemente spostare i rami dopo che l'importazione è terminata e nessuna cronologia andrà persa.

Alcune informazioni aggiuntive a supporto della risposta accettata:

cvs2svn non consente la conversione da trunk a branch o da branch a trunk

quindi spostare le cose una volta convertiti in svn è il modo migliore di procedere.

È possibile spostare le directory trunk e branch dopo la conversione, ma ciò richiederebbe un esplicito commit SVN post-conversione che rimarrà nella cronologia SVN, rendendo l'esplorazione della cronologia un po 'più complicata.

Ma puoi davvero dire a cvs2svn di memorizzare il tronco e i rami nei percorsi SVN che desideri usando l'opzione da riga di comando --symbol-hints = symbol-hints.txt o (se stai usando un file di opzioni per la tua conversione) la SymbolHintsFileRule ('symbol-hints.txt') regola della strategia dei simboli, dove symbol-hints.txt è un file contenente righe come il seguente:

. .trunk. trunk branches/branchX .
. branchX branch trunk .

Si noti che alcuni messaggi di commit generati automaticamente da cvs2svn (ad esempio, per la creazione del ramo) menzioneranno il nome del ramo originale.

Sebbene sia possibile spostarsi tra i rami dopo aver effettuato la conversione, potrebbe essere meglio impostare il file di configurazione cvs2svn per specificare esattamente il nome desiderato per ciascuno dei rami esistenti. Uno dei vantaggi di questo è che FishEye capirà molto meglio l'output.

Sono particolarmente interessato a preservare la cronologia dei commit. Se rinominerò e spostassi i rami in SVN dopo la conversione, la cronologia verrà conservata?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top