Quando si utilizza cvs2svn come è possibile rinominare i simboli in modo tale che un ramo e un tag si risolvano con lo stesso nome?

StackOverflow https://stackoverflow.com/questions/157599

  •  03-07-2019
  •  | 
  •  

Domanda

Sto lavorando alla conversione di un repository CVS che ha i seguenti simboli (tra gli altri):

tcm-6.1.0-branch - un ramo
tcm-6.1.0 - un tag

Usando le trasformazioni standard cvs2svn le identifica correttamente. Tuttavia, mi piacerebbe fare un po 'di pulizia durante la conversione. In particolare, vorrei eliminare la parte ridondante '-branch' del simbolo del ramo, poiché sarà nella directory 'rami' in svn. Ho aggiunto quanto segue a symbol_transforms del progetto:

RegexpSymbolTransform(r'(.*)-branch', r'\1')

Ora finisco con " ERRORE: definizioni multiple del simbolo 'tcm-6.1.0' in ... " per ogni file perché tcm-6.1.0 è sia un ramo che un tag. Ho diverse coppie di simboli CVS che causano questo problema.

Mi sembra che, poiché i simboli di origine sono diversi e le directory di destinazione sono diverse, questa operazione dovrebbe essere possibile. C'è qualcosa che mi manca o è semplicemente un difetto di cvs2svn?

Come posso rinominare questi simboli in modo che rimangano separati e risultino in un ramo e un tag con lo stesso nome?

-

Se non ci sono soluzioni, cercherò di escludere i simboli del problema dalle regole di conversione e di spostarli a mano dopo, anche se preferirei farlo al momento della conversione.

È stato utile?

Soluzione

RegexpSymbolTransform funziona a un livello troppo basso, durante l'analisi dei file del repository. Pertanto, se si utilizza un SymbolTransform per assegnare a due simboli lo stesso nome, verranno trattati come uno stesso simbolo.

È possibile rinominare rami e tag dopo la conversione, ma ciò richiederebbe un esplicito commit SVN che rimarrà nella tua storia per sempre, rendendo l'esplorazione della storia un po 'più complicata.

Invece, dovresti convertire il ramo con il suo nome originale, ma poi dire a cvs2svn di memorizzarlo nel percorso SVN /branches/tcm-6.1.0. In questo modo il simbolo finirà nel posto giusto per un ramo SVN con il nome desiderato, ma sarà comunque trattato da cvs2svn come distinto dal tag con lo stesso nome.

Questo può essere fatto usando l'opzione --symbol-hints = symbol-hints.txt o l'opzione SymbolHintsFileRule ('symbol-hints.txt') regola di strategia, dove symbol-hints.txt è un file contenente una riga come la seguente:

  

. tcm-6.1.0-branch branch /branches/tcm-6.1.0.

L'unico svantaggio di questo approccio che mi viene in mente è che alcuni messaggi di commit generati automaticamente da cvs2svn (ad esempio, per la creazione del ramo) menzioneranno il nome del ramo originale.

/ p>

Altri suggerimenti

cvs2svn fa molta magia tra cvs e svn. Ecco perché non puoi " abbinare " i nomi di rami e tag, dato che cvs2svn non saprà quale versione appartiene a quale dir. Il mio consiglio è di rinominarli successivamente in un unico commit con uno strumento come svnmucc . Quindi hai un unico commit e poi tutto è a posto.

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