Domanda

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

È possibile apportare modifiche al ramo dopo il reinserimento e unirle nuovamente nel bagagliaio in un secondo momento?

È stato utile?

Soluzione

Puoi farlo tecnicamente, il tuo ramo non è morto né disabilitato, ma non è consigliabile unire da ramo a tronco dopo il reinserimento.

Puoi trovare una discussione completa sul motivo di ciò, qui: Unione sovversione reintegrare

Fondamentalmente, si dice, è possibile unire nuovamente le modifiche al tronco, ma poiché il reinserimento ti costringe a unire da tronco a ramo prima dell'operazione di reintegrazione ti troverai di fronte a Riflessione / Unione ciclica che è molto problematica in Subversion 1.5.
Secondo l'articolo, si consiglia di eliminare il ramo reintegrato immediatamente dopo il reinserimento e crearne uno nuovo con lo stesso (o diverso) nome.

Questo è un comportamento noto di Subversion che verrà affrontato nella versione futura (probabilmente nella 1.6)


Altri suggerimenti

In realtà, è necessario eseguire un'unione --record-only dal trunk al ramo della revisione creata 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

Ora sei felice di mantenere il ramo

Ulteriori informazioni sono in Capitolo 4. Diramazione e fusione, fusione avanzata .

Dopo esserti reintegrato da un ramo nel tronco, dovresti fare una delle due cose:

  • Elimina il tuo ramo . Questo è il più semplice, ma rende più difficile vedere la storia del ramo.

  • Tell la tua filiale non unire il commit reintegrato . Se ti reintegri nel trunk e lo commetti come revisione X, puoi eseguire questo comando sul tuo ramo: svn merge --record-only -c X url-to-trunk . Tuttavia, non dovresti farlo se hai apportato modifiche come parte del commit, oltre all'unione stessa. Qualsiasi altra modifica non verrà mai ripristinata nel tuo ramo.

Alcuni consigli su come ricollegare le modifiche se qualcuno apporta più volte modifiche alla filiale (pre 1.5): Ricorda a quale revisione hai fatto l'unione ! Scrivi i numeri di revisione da qualche parte, o (che è più facile) crea un tag . (Ovviamente puoi scoprirlo più tardi, ma è un PITA.)

Esempio:

Hai un layout di repository come questo:

/your_project
  /trunk
  /branches
  /tags

Diciamo che si tratta di un'applicazione web e hai pianificato di rilasciare una versione. Dovresti creare un tag e da quello (o dal trunk) un ramo in cui esegui le correzioni:

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

In questo modo, è possibile integrare le nuove funzionalità nel trunk. Tutti i bugfix si verificano solo all'interno del ramo bugfix e prima di ogni versione si crea un tag della versione corrente (ora dal ramo bugfix).

Supponiamo che tu abbia fatto un bel po 'di correzioni di bug e le abbia rilasciate sul server di produzione e che tu abbia disperatamente bisogno di una di quelle funzionalità 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 tuo trunk (supponendo 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 delle tue correzioni:

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

Ora hai tutte le modifiche unite al tuo trunk e puoi effettuare 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

Come tutti hanno già detto qui: il ramo non è morto e si impegna nel ramo può continuare bene.

A volte però vuoi uccidere il ramo dopo l'unione. L'unica soluzione affidabile è eliminare il ramo. Il rovescio della medaglia è che poi è più difficile ritrovare il ramo se si vuole dare un'occhiata, diciamo, per ragioni storiche. Quindi, molte persone lasciano il "importante" rami che si trovano in giro e hanno un accordo di non cambiarli. Vorrei che ci fosse un modo per contrassegnare un ramo morto / di sola lettura, assicurando così che nessuno possa impegnarlo fino a nuovo avviso.

No, il ramo è ancora vivo, ma, in quel momento, è esattamente lo stesso del tronco. Se continui a sviluppare sul ramo, sei libero di ricollegarti con il tronco in seguito.

Puoi unire da un ramo a tronco, o tronco a un ramo, tutte le volte che vuoi.

Prima di tutto, è necessario aggiornare il client e il server Subversion se si utilizza ancora Subversion 1.7 o precedente. Non vi è alcun motivo per utilizzare versioni di Subversion molto vecchie. A partire dal 2016, la versione attuale è Subversion 1.9. Anche SVN 1.8 è ora supportato e riceve ancora correzioni di bug.

Il problema richiesto è stato risolto in Subversion 1.8. A partire da SVN 1.8, l'opzione --reintegrate è stata obsoleta . Le reintegrazioni delle fusioni ora vengono eseguite automaticamente . Vedi Note di rilascio di Subversion 1.8 relative al miglioramento .

Leggi SVNBook 1.8 | Reintegrazione di un ramo :

  

Se scegli di non eliminare il tuo ramo dopo averlo reintegrato nel file   trunk è possibile continuare a eseguire fusioni di sincronizzazione dal trunk e quindi   reintegrare di nuovo il ramo. Se lo fai, solo le modifiche apportate   il tuo ramo dopo il primo reinserimento viene unito al tronco.

     

...

     

Solo Subversion 1.8 supporta questo riutilizzo di un ramo di funzionalità. prima   le versioni richiedono una gestione speciale prima di poter essere un ramo di funzionalità   reintegrato più di una volta. Vedi la versione precedente di questo capitolo   per maggiori informazioni:    http://svnbook.red -bean.com/en/1.7/svn.branchmerge.basicmerging.html#svn.branchemerge.basicmerging.reintegrate

Quando si esegue un'unione, si specifica la destinazione. Se lo desideri, puoi unire le differenze tra TreeA e TreeB e TreeC. Come suggerisce Chris, la tua domanda non ha molto senso. Se unisci il tuo ramo nel tronco, il ramo rimane intatto. Se il ramo non è necessario in seguito, è possibile eliminarlo.

Puoi continuare a sviluppare sul ramo, la funzione di cui avrai bisogno è merge-tracking che si trova in Subversion 1.5, ciò significa che ulteriori fusioni dal ramo includono solo nuove modifiche.

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