[svn] Reintegrazione del ramo di Subversion



4 Answers

In realtà, devi eseguire --record-only dal trunk nel tuo ramo della revisione che è stato creato dal commit --reintegrate :

$ cd trunk
$ svn merge --reintegrate ^my-branch 
$ svn commit

Committed revision 555. 
# This revision is ^^^^ important

E ora lo registri

$ cd my-branch
$ svn merge --record-only -c 555 ^trunk 
$ svn commit

Sei felice di mantenere il ramo ora

Ulteriori informazioni sono disponibili nel Capitolo 4. Diramazione e fusione, Unione avanzata .

Question

Quando un ramo è reintegrato nel tronco, quel ramo è effettivamente morto?

Puoi apportare modifiche al ramo dopo il reinserimento e unirle di nuovo nel bagagliaio in un secondo momento?




Prima di tutto, dovresti aggiornare il tuo client e server Subversion se usi ancora Subversion 1.7 o precedente. Non c'è motivo di usare versioni molto vecchie di Subversion. A partire dal 2016, la versione corrente è Subversion 1.9. Anche SVN 1.8 è ora supportato e continua a ricevere correzioni di bug.

Il problema che hai posto è stato risolto in Subversion 1.8. A partire da SVN 1.8, --reintegrate opzione --reintegrate è stata deprecata . Reintegrare le unioni vengono ora eseguite automaticamente . Vedi la nota di rilascio di Subversion 1.8 relativa al miglioramento .

Leggi SVNBook 1.8 | Reintegrare un ramo :

Se si sceglie di non eliminare il ramo dopo averlo reintegrato nel trunk, è possibile continuare a eseguire l'unione delle sincronizzazioni dal trunk e quindi reintegrare nuovamente il ramo. Se lo fai, solo le modifiche apportate sul ramo dopo il primo reintegro vengono unite al tronco.

...

Solo Subversion 1.8 supporta questo riutilizzo di un ramo di funzionalità. Le versioni precedenti richiedono un trattamento speciale prima che un ramo di funzionalità possa essere reintegrato più di una volta. Vedere la versione precedente di questo capitolo per ulteriori informazioni: http://svnbook.red-bean.com/en/1.7/svn.branchmerge.basicmerging.html#svn.branchemerge.basicmerging.reintegrate




Puoi continuare a sviluppare sul ramo, la funzionalità di cui hai bisogno è il merge-tracking che si trova in Subversion 1.5, questo significa che ulteriori fusioni dal ramo includono solo nuove modifiche.




Alcuni consigli su come fondere le modifiche indietro se qualcuno apporta modifiche al ramo più volte (pre 1.5): Ricorda in quale revisione hai fatto l'unione ! Scrivi i numeri di revisione da qualche parte o (che è più semplice) crea un tag . (Puoi ovviamente scoprirlo più tardi, ma questa è una PITA.)

Esempio:

Hai un layout del repository come questo:

/your_project
  /trunk
  /branches
  /tags

Diciamo che è un'applicazione web e hai pianificato di fare un rilascio. Dovresti creare un tag e da questo (o dal trunk) un ramo in cui fai i bugfix:

/your_project
  /trunk
  /branches
    /1.0.0-bugfixes
  /tags
    /1.0.0

Facendolo in questo modo, puoi integrare le nuove funzionalità nel bagagliaio. Tutte le correzioni di bug si sarebbero verificate solo all'interno del ramo di bugfix e prima di ogni release si effettua un tag della versione corrente (ora dal ramo di bugfix).

Supponiamo che tu abbia eseguito una discreta quantità di bugfix e che li hai rilasciati al server di produzione e hai bisogno di una di quelle funzionalità disperatamente nel trunk corrente:

/your_project
  /trunk
  /branches
    /1.0.0-bugfixes
  /tags
    /1.0.0
    /1.0.1
    /1.0.2

Ora puoi semplicemente integrare le modifiche tra 1.0.0 e 1.0.2 nel bagagliaio (ammesso che tu sia nella tua copia di lavoro):

svn merge http://rep/your_project/tag/1.0.0 http://rep/your_project/tag/1.0.2 .

Questo è ciò che dovresti ricordare. Hai già unito le modifiche tra 1.0.0 e 1.0.2 sul trunk. Supponiamo che ci siano più cambiamenti nell'attuale versione di produzione:

/your_project
  /trunk
  /branches
    /1.0.0-bugfixes
  /tags
    /1.0.0
    /1.0.1
    /1.0.2
    /1.0.3
    /1.0.4

Ora sei pronto per rilasciare la nuova versione dal trunk, ma mancano ancora le ultime modifiche ai tuoi bugfix:

svn merge http://rep/your_project/tag/1.0.2 http://rep/your_project/tag/1.0.4 .

Ora tutte le modifiche si sono fuse nel bagagliaio e puoi fare il tuo rilascio (non dimenticare di testarlo prima).

/your_project
  /trunk
  /branches
    /1.0.0-bugfixes
    /1.1.0-bugfixes
  /tags
    /1.0.0
    /1.0.1
    /1.0.2
    /1.0.3
    /1.0.4
    /1.1.0



No, il ramo è ancora vivo, ma in quel momento è esattamente uguale al tronco. Se continui a sviluppare sul ramo, sei libero di ri-unire con il tronco più tardi.




Related