Usando TortoiseSVN come unire le modifiche dal tronco a un ramo e viceversa?


132

Ho letto su ramificazione / fusione con Subversion 1.5 usando l'eccellente e gratuito controllo della versione con il libro Subversion . Penso di comprendere come utilizzare il client della riga di comando di Subversion per eseguire le azioni di cui ho più bisogno, che sono:

Aggiorna filiale con modifiche dal trunk

Dalla directory di lavoro della filiale eseguire:

svn merge http://svn.myurl.com/proj/trunk

Unisci Branch in Trunk

Dalla directory di lavoro del trunk eseguita:

svn merge --reintegrate http://svn.myurl.com/proj/branches/mybranch

Tuttavia, stiamo usando TortoiseSVN 1.5 come interfaccia per Subversion. Vorrei sapere come eseguire al meglio queste operazioni con TortoiseSVN. La nuova finestra di dialogo offre tre diverse opzioni nel menu principale.

  1. Unisci una serie di revisioni
  2. Reintegrare un ramo
  3. Unisci due alberi diversi

Da quello che posso raccogliere, TortoiseSVN esegue sempre svn con la seguente sintassi.

svn merge [--dry-run] --force From_URL @ revN To_URL @ revM PATH

Inoltre, reintegrare un ramo spesso fallisce con un messaggio che indica che alcuni target non sono stati uniti e quindi non può continuare, e quindi ho dovuto usare l'opzione # 3.

Le mie domande sono:

  1. Come posso usare TortoiseSVN 1.5 per unire le modifiche dal trunk a un ramo?
  2. Come posso usare TortoiseSVN 1.5 per unire il ramo al tronco, con e senza il metodo di reintegrazione?
  3. Quale delle opzioni di cui sopra dovrei usare per ognuna e perché?

MODIFICARE

Attraverso i test "dry run" ho scoperto che l'operazione Subversion da riga di comando

svn merge http://svn.myurl.com/proj/trunk

è analogo all'opzione n. 1 (Unisci un intervallo di revisioni) in TortoiseSVN, purché lasci vuoto l'intervallo di revisione.


I link non sono stati trovati! = /
Leonardo Costa

Risposte:


28

Il comportamento dipende dalla versione del repository. Subversion 1.5 consente 4 tipi di unione:

  1. unisci sourceURL1 [@N] sourceURL2 [@M] [WCPATH]
  2. unire sourceWCPATH1 @ N sourceWCPATH2 @ M [WCPATH]
  3. unisci [-c M [, N ...] | -r N: M ...] SOURCE [@REV] [WCPATH]
  4. merge --reintegrate SOURCE [@REV] [WCPATH]

Subversion prima della 1.5 consentiva solo i primi 2 formati.

Tecnicamente puoi eseguire tutte le fusioni con i primi due metodi, ma gli ultimi due abilitano il monitoraggio unione di sovversione 1.5.

Le opzioni di TortoiseSVN uniscono un intervallo o le mappe di revisione al metodo 3 quando il repository è 1.5+ o al metodo uno quando il repository è più vecchio.

Quando si uniscono le funzionalità a un ramo di rilascio / manutenzione, è necessario utilizzare il comando "Unisci un intervallo di revisioni".

Solo quando si desidera unire nuovamente tutte le funzionalità di un ramo a un ramo principale (comunemente trunk), è possibile utilizzare "Reintegrare un ramo".

E l'ultimo comando -Unisci due alberi diversi- è utile solo quando vuoi uscire dal normale comportamento di ramificazione. (Ad esempio, confrontando versioni diverse e quindi unendo la differenza a un altro ramo)


qualcuno potrebbe aiutarmi con stackoverflow.com/questions/51657636/… . Questa è una domanda importante per il nostro team, abbiamo bisogno di alcune idee al riguardo.
aprile

249

Non ho potuto seguire correttamente le altre risposte, ecco più una guida per i manichini ...

Puoi farlo in entrambi i modi per andare trunk -> brancho branch -> trunk. Prima di tutto trunk -> branchrisolvo sempre eventuali conflitti e poi li unisco branch -> trunk.

Unire il trunk in un ramo / tag

  1. Controlla il ramo / tag
  2. Fare clic con il tasto destro sulla radice del ramo | Tortoise SVN | Unisci ...
  3. Unisci tipo: unisci un intervallo di revisioni | Fai clic su "Avanti" inserisci qui la descrizione dell'immagine
  4. Unisci intervallo di revisione: selezionare l'URL della directory trunk copiata nel ramo / tag. Immettere le revisioni per unire o lasciare il campo vuoto per unire tutte le revisioni | fai clic su "Avanti" inserisci qui la descrizione dell'immagine
  5. Opzioni di unione: ho appena lasciato queste come predefinite | fai clic su "Unisci" inserisci qui la descrizione dell'immagine
  6. Ciò unirà le revisioni nel ramo / tag estratto
  7. Quindi eseguire il commit delle modifiche unite al ramo / tag

4
Ho lasciato fuori "Intervallo di revisione da unire" e ho fatto un "Test unione". Era quello di cui avevo bisogno: l'intervallo era impostato automaticamente per me (da quando il ramo è stato fatto all'ultima revisione nel ramo)
Lian

Ottima risposta: concisa e facile da seguire. Ha funzionato per me, ma quando volevo solo unire un singolo file di configurazione, per qualche motivo ho dovuto farlo due volte. Va tutto bene adesso. Saluti
Winger,

@Lian Ho fatto la stessa cosa per fondere dal tronco al ramo; lasciare vuoto l'intervallo di revisione se si desidera unire l'ultima versione dei file dal trunk ai file di diramazione.
Winger,

2
La versione attuale di Tortoise SVN ora ha un'opzione per unire tutte le revisioni invece di lasciare vuoto l'intervallo di revisione nel passaggio 4.
The Unknown Dev

1
@Onkar Alcuni conflitti accadranno quasi sempre. Se hai due rami, ad esempio trunke branch, assicurandoti di unire le modifiche trunkal branchpiù presto possibile, eviterai il più possibile i conflitti. Ciò significa che quando ci si unisce brancha trunknon ci dovrebbero essere conflitti.
icc97,

12

È necessario utilizzare "unisci un intervallo di revisione".

Per unire le modifiche dal trunk a un ramo, all'interno della copia di lavoro del ramo scegliere "unisci intervallo di revisioni" e immettere l'URL del trunk e le revisioni di inizio e fine da unire.

Lo stesso nel modo opposto per unire un ramo nel tronco.

Informazioni sulla bandiera --reintegrate, consultare il manuale qui: http://tortoisesvn.net/docs/release/TortoiseSVN_en/tsvn-dug-merge.html#tsvn-dug-merge-reintegrate


1

Dai un'occhiata a svnmerge.py . È a riga di comando, non può essere invocato da TortoiseSVN, ma è più potente. Dalle FAQ :

La sovversione tradizionale ti permetterà di unire le modifiche, ma non "ricorda" ciò che hai già unito. Inoltre, non fornisce un modo conveniente per escludere una serie di modifiche dall'unione. svnmerge.py automatizza parte del lavoro e lo semplifica. Svnmerge crea anche un messaggio di commit con i messaggi di registro di tutte le cose che ha unito.


6
svnmerge.py è stato sviluppato su Subversion 1.4 e precedenti. Subversion 1.5 ha introdotto il monitoraggio delle unioni nel prodotto principale.
Bert Huijben,

0

Maiusc-tasto destro del mouse sulla cartella e selezionare TortoiseSVN -> Unisci tutto

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.