2010-06-07 8 views
6

Diciamo che ho un ramo di funzionalità denominato "branches/BigFeature". Voglio spingere queste modifiche al Trunk, apportare alcune modifiche a Trunk e unirle nuovamente al ramo "BigFeature" in modo che lo sviluppo possa continuare.Perché ottengo conflitti quando si unisce un ramo al tronco e quindi lo si unisce al ramo?

miei passi erano:

  1. fondere le ultime modifiche in tronco a rami/BigFeature. (Tortoise SVN -> Unisci una serie di revisioni)

  2. Unisci le modifiche in rami/BigFeature a Trunk. (Tortoise SVN -> Reintegrare un ramo)

  3. Apportare alcune modifiche a Trunk.

  4. Unisci le modifiche in Trunk a rami/BigFeatures. (Tortoise SVN -> Unisci una serie di revisioni)

il problema si pone al punto 4. Quando mi unisco di nuovo a BigFeature ricevo tutti i tipi di conflitti. Sembra avere un problema con i file che sono stati originariamente aggiunti nelle filiali/BigFeature ma sono stati uniti al trunk.

Il messaggio che mi dà è "L'ultima operazione di unione cercato di aggiungere il file 'blah', ma è già stato aggiunto localmente.

Questo rende un po senso perché il file era in origine aggiunto nel ramo filiali/BigFeature e quindi unito a Trunk.Perché l'operazione di unione non può essere realizzata? Perché si presenta come un conflitto?

Lo stesso tipo di errore si verifica per i file cancellati.

L'ultima operazione di unione ha tentato di eliminare/spostare/rinominare la directory 'blah', ma è stata eliminata, spostata o rinominata in locale.

Grazie per il vostro aiuto.

+5

svn merge in generale non funziona bene. – alternative

+1

Ci sono alternative? – Justin

+5

Chiunque dica che svn merge non funziona, non lo fa correttamente. La visione concettuale di Svn dei cambiamenti non è la migliore (in seguito SCM come git lo ha un po 'più vicino al marchio), ma non è affatto vero che non si può fondersi con la sovversione o anche gestire un codebase complicato con le unioni in arrivo dentro e fuori. – Ether

risposta

7

Sfortunatamente è una carenza di svn, il modo in cui è costruita.

I passi in svn deve guardare in questo modo:

1. (not modified) Merge the latest changes in Trunk to branches/BigFeature. (Tortoise SVN -> Merge a range of revisions) 
2. (not modified) Merge the changes in branches/BigFeature to Trunk. (Tortoise SVN -> Reintegrate a branch) 

2a. Delete branch branches/BigFeature 
2b. Create branch branches/BigFeature from current trunk 

3. (not modified) Make some changes to Trunk. 
4. (not modified) Merge the changes in Trunk to branches/BigFeatures. (Tortoise SVN -> Merge a range of revisions) 

SVN ramo non è più utilizzabile è dopo un'operazione di reintegrare.

Aggiornamento: c'è un second way, invece di eliminare il ramo.

2a. on branch: 
    $ svn update 
    Updated to revision X 
    $ svn merge --record-only -c X ^/trunk 
    $ svn commit -m "Block revision X from being merged into the branch." 

Non sapevo questo trucco, ho imparato grazie alla tua domanda: D

+0

Questo è sfortunato. Ma hey almeno non è solo io :) E questo lavoro dovrebbe fare il trucco. – Justin

+0

Non è necessario eliminare e ricreare i rami tutto il tempo. Devi solo costruire correttamente il comando di unione per non ri-unire tutto ciò che hai unito prima. – Ether

+0

Puoi fornire alcune informazioni su come farlo? Sto bene con la linea cmd ma ovviamente preferirei se Tortoise SVN fornisse un mezzo per farlo. – Justin

Problemi correlati