Domanda

sto usando cvs2svn di convertire il mio repository. L'ho fatto con successo in un repository, e ora il mio nuovo problema è un secondo repository.

Nella mia nuova conversione, voglio convertire solo la testa e un ramo. cvs2svn avere solo "escludere" la funzione per le filiali, ma non "include". Ho molti molti rami ed escludendo tutti e ciascuno di loro vorrà un sacco di lavoro ....

esiste un modo per convertire solo il tronco (HEAD) e solo un ramo?

Grazie, Oded

È stato utile?

Soluzione

Se si desidera solo mantenere quello ramo e nessun tag , allora questo è facile. La prima regola che corrisponde a un simbolo viene utilizzato, in modo da specificare il ramo che si desidera includere quindi escludere tutto il resto:

cvs2svn --force-branch=mybranch --exclude='.*' ...

Se si desidera includere non solo il ramo, ma anche il maggior numero di tag come possibile, allora è un po 'più complicato. Non solo non lo necessariamente conoscere i nomi di tutti i tag, ma anche voi non può includere tag che dipendono da rami esclusi. In questo caso, è più facile lavorare con le opzioni --write-simbolo-info e --symbol-suggerimenti:

cvs2svn --write-symbol-info=symbol-info.out --passes=1:3 ...

Questo creerà un file chiamato "simbolo-info.out" che contiene informazioni su tutti i simboli CVS. Nel vostro editor, aprire questo file, trovare tutte le linee corrispondenti a rami che si desidera escludere, e cambiare la terza colonna di quelle linee alla parola "escludere". Assicurarsi che la terza colonna della linea per il ramo che si desidera includere contiene la parola "succursale" e la sua quarta colonna è il percorso in cui si desidera finire.

Ora eseguire cvs2svn di nuovo, a partire dal passaggio 3, e utilizzando il file di simboli-info modificato come un simbolo accenna file:

cvs2svn --symbol-hints=symbol-info.out --passes=3 ...

si otterrà un sacco di errori, come:

ERROR: ExcludedSymbol('FOO_BRANCH') cannot be excluded because the following symbols depend on it:
    BAR_TAG
    BAZ_TAG

Ora tornare in editor e modificare i tag quotate (BAR_TAG e BAZ_TAG nell'esempio) da escludere troppo, quindi provare a eseguire di nuovo pass3. potrebbe essere necessario Questa procedura deve essere iterata un paio di volte, ma non dovrebbe essere ingombrante perché pass3 corre molto rapidamente.

Dopo aver ottenuto pass3 per completare senza errori, eseguire il resto della conversione:

cvs2svn --symbol-hints=symbol-info.out --passes=4: ...

Altri suggerimenti

Un problema è che cvs2svn non solo ha bisogno di determinare se includere un ramo o no, ma (simultaneamente) se un simbolo è un ramo o un tag, in primo luogo. Quindi, se si desidera includere che un ramo, e anche alcuni tag, è più difficile che solo dicendo "includere solo quel ramo." - così facendo avrebbe ucciso tutti i tag

IOW, cvs2svn in realtà non supporta questo. È possibile aggirare modificando il suo codice sorgente. In cvs2svn_lib.symbol_strategy.BranchIfCommits, modificare il caso in cui si ritorna Branch (simbolo) per

   if symbol.name == 'my_branch':
       return Branch(symbol)
   else:
       return ExcludedSymbol(symbol)

IIUC, BranchIfCommits devono essere utilizzati per impostazione predefinita.

Personalmente, vorrei usare una strategia diversa:

 1. convert the repository once, with all branches.
 2. do a "svn ls" on branches, and redirect that into a file.
 3. edit the file to construct an exclude regex out of it, of the form `b1|b2|...|bn`

Non direi che un sacco di lavoro ...

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