Domanda

Voglio convertire un progetto CVS in Subversion, usando cvs2svn. Ha un tronco principale (HEAD), con diversi rami di sviluppo temporanei creati dal tronco.

Prima di convertirlo, uniremo le ultime modifiche dal trunk in tutti i rami di sviluppo. Ma avranno anche cambiamenti che non sono stati ancora riuniti nel bagagliaio.

Quando converto il progetto in SVN, non avrà nessuna delle proprietà della cronologia di unione. Quindi, come posso inizializzare quelle proprietà, in modo da poter successivamente unire da e verso i rami?

In altre parole, dopo la conversione, ci saranno un certo numero di differenze tra il tronco e qualsiasi ramo dato. La prossima volta che mi unisco dal tronco al ramo, non voglio vedere quelle differenze come cambiamenti che devono essere uniti. Ma quando mi unisco dal ramo al tronco, lo faccio. È possibile?

AGGIORNAMENTO : ho preso il suggerimento di mhagger e ho detto a SVN che i rami avevano già tutti i cambiamenti uniti dal tronco:

svn co [branch URL] .
svn merge --record-only [trunk URL]
svn commit -m ''

Funziona, quindi la prossima volta che provo a unire il tronco in un ramo, non mostra nuove modifiche.

Ma ho ancora un problema con - reintegrate fusioni, dal ramo al tronco. Finisce per mostrare molti file sostituiti "R", il che significa che il trunk ha un file X e il ramo ha un file X, ma non sono considerati lo stesso file. Questo rende il tipo di unione disordinato, anche se sembra finire con i giusti risultati.

Penso che ciò accada a causa della seguente sequenza di eventi:

  • Branch creato (in CVS)
  • Un file X è stato aggiunto al trunk (in CVS)
  • X è stata unita alla filiale (anche in CVS)
  • Il progetto è stato convertito in Subversion
  • Subversion non sapeva che il ramo / X era stato copiato dal trunk / X. Così pensa che sia un rimpiazzo.

La storia di SVN è simile a questa:

r100: create branch (copied from trunk)
r200: add trunk/X
r300: add branch/X (because of a CVS merge, but it's not a SVN copy)

Quindi, c'è un modo per dire a Subversion di ignorare i file " antenati quando si fa una fusione - reintegrare? O un modo migliore per convertire questi file?

È stato utile?

Soluzione 2

OK, penso di avere una soluzione alternativa al problema --integrate sopra, nel caso qualcuno fosse interessato.

Secondo questo documento , se I hai unito l'ultima versione del trunk nel ramo, fare un --reintegrate è essenzialmente lo stesso che fare questo al trunk:

svn merge [trunk URL] [branch URL]

Ma questa sintassi consente --ignore-ancestry, che - reintegrare no. Quindi posso fare:

svn merge --ignore-ancestry [trunk URL] [branch URL]

Questo mi mostra gli stessi risultati di un --reintegrate, senza tutti i file sostituiti "R". L'unica altra differenza sembra essere le proprietà mergeinfo. Non sono sicuro se questi saranno corretti, quindi probabilmente è meglio eliminare il ramo in seguito, proprio come faresti dopo un --reintegrate.

Altri suggerimenti

Come probabilmente saprai, cvs2svn non genera metadati di unione, ad eccezione delle informazioni implicite sulla provenienza dei rami. (Non può, perché CVS non registra tali informazioni.) Quindi, dopo la conversione, dovrai dire esplicitamente a Subversion delle fusioni che sono state fatte sotto CVS.

Il modo più semplice per farlo è usare " svn merge --record-only ... " ;, come descritto in il libro Subversion .

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