Domanda

Sono abbastanza abituato a come eseguire unioni CVS in Eclipse e per il resto sono soddisfatto del modo in cui sia Subclipse che Subversive funzionano con il repository SVN, ma non sono del tutto sicuro di come eseguire correttamente le unioni.

Quando eseguo un'unione, sembra che voglia inserire i file uniti in una directory separata nel mio progetto piuttosto che sovrascrivere i vecchi file che devono essere sostituiti nell'unione, come sono abituato in CVS.

La domanda non è specifica né di Subclipse né di Subversive.

Grazie per l'aiuto!

È stato utile?

Soluzione

Consiglierei di non provare a utilizzare i plugin di Eclipse come accesso principale a Subversion.

Se stai sviluppando su Windows, TortoiseSVN è il miglior programma che ho visto per l'accesso a Subversion.Esplora la directory che desideri unire, fai clic con il pulsante destro del mouse su di essa e utilizza l'opzione di unione SVN Tortoise.Supponendo un'unione non interattiva, una volta riscontrati i conflitti, dovrai esaminare ciascun file in conflitto e modificare i conflitti prima di contrassegnarli come risolti.Per questo processo consiglio un programma chiamato KDiff3, che mostra la copia del tuo repository locale (cosa era memorizzato nel file .svn prima della fusione), la tua copia locale (incluse eventuali modifiche) e la copia proveniente dal repository e ti consente di vedere facilmente (e anche modificare manualmente se necessario) il risultato della fusione.Gestisce automaticamente anche una serie di conflitti minori.

KDiff3 è portatile, TortoiseSVN è un'estensione della shell di Windows, quindi se stai utilizzando un altro ambiente, proverei a utilizzare semplicemente SVN per unire.Ma sarebbe molto più doloroso :)

Altri suggerimenti

Unione di un intero ramo nel tronco

  1. Esamina la cronologia del progetto Branch per determinare la versione da cui è stato preso il branch

    • per impostazione predefinita, la "Cronologia" di Eclipse Team mostra solo le ultime 25 revisioni, quindi dovrai fare clic sul pulsante in quella vista etichettato "Mostra tutto"
    • quando dici "Mostra tutto" ti riporterà indietro oltre la data del ramo e ti mostrerà anche tutta la cronologia del tronco, quindi dovrai cercare il tuo commento dove hai ramificato
    • NOTA:se usi Tortise SVN per questa stessa attività (vai al ramo e seleziona "Mostra registro") ti mostrerà solo la cronologia del ramo in modo da poter dire esattamente dove è iniziato il ramo
  2. Quindi ora so che 82517 era il primo ID di versione della cronologia del ramo.Quindi tutte le versioni del ramo successive a 82517 presentano modifiche che desidero unire nel trunk

  3. Ora vai al progetto "trunk" nel tuo spazio di lavoro Eclipse e seleziona "tasto destro - Team - Unisci"

  4. La visualizzazione predefinita è l'unione di 1 URL

    • seleziona l'URL del ramo da cui stai unendo
    • in Revisioni seleziona "Tutti"
    • premere OK
  5. Questo ti porterà alla prospettiva "Sincronizzazione del team" (in caso contrario dovresti andarci tu stesso) per risolvere i conflitti (vedi sotto)

Riunire più modifiche al ramo nel trunk

  1. Controlla la cronologia del progetto trunk per determinare l'ultima volta che ti sei unito al trunk (avresti dovuto commentarlo)

    • per amor di discussione diciamo che questa versione era 82517
  2. Quindi ora so che qualsiasi versione maggiore di 82517 nel ramo deve essere unita al trunk

  3. Ora vai al progetto "trunk" nel tuo spazio di lavoro Eclipse e seleziona "tasto destro - Team - Unisci"

  4. La visualizzazione predefinita è l'unione di 1 URL

    • seleziona l'URL del ramo da cui stai unendo
    • in Revisioni seleziona il pulsante di opzione "Revisioni" e fai clic su "Sfoglia"
    • questo aprirà un elenco delle ultime 25 revisioni dei rami
    • seleziona tutte le revisioni con un numero maggiore di 82517
    • premi OK (dovresti vedere l'elenco delle revisioni nel campo di input accanto al pulsante di opzione)
    • premere OK
  5. Questo ti porterà alla prospettiva "Sincronizzazione del team" (in caso contrario dovresti andarci tu stesso) per risolvere i conflitti (vedi sotto)

Risoluzione dei conflitti

  1. Dovresti essere nella prospettiva "Sincronizzazione del team".Sembrerà una normale sincronizzazione a scopo di commit in cui vengono visualizzati file nuovi e file in conflitto.

  2. Per ogni file in cui vedi un conflitto scegli "tasto destro - Modifica conflitti" (non fare doppio clic sul file, verrà visualizzato lo strumento di versione commit diff, questo è MOLTO diverso)

    • se vedi cose come "<<<<<<< .working" o ">>>>>>> .merge-right.r84513" significa che sei nella modalità di modifica sbagliata
  3. una volta risolti tutti i conflitti in quel file, dì al file di "contrassegnare come unito"

  4. una volta che tutti i file sono privi di conflitti, puoi sincronizzare il tuo progetto Eclipse e salvare i file su SVN

In genere controllo entrambi i rami e quindi utilizzo l'opzione di confronto reciproco che esegue un confronto simile alla sincronizzazione dei due alberi di origine.Dopo aver integrato le modifiche in un ramo, è possibile eseguire nuovamente il commit nel repository.

Usa l'integrazione Eclipse, funziona perfettamente.

Il cambiamento principale rispetto a CVS è che unisci solo i delta di un ramo, cioè le modifiche da una revisione all'altra.Vale a dire che devi tenere traccia in qualche modo della revisione iniziale corretta (a meno che tu non abbia la cronologia di unione di svn 1.5)

Se hai capito bene, spetta solo a te apportare le modifiche corrette con l'editor di confronto.

In primo luogo, se vedi ">>>>>" e simili nei tuoi file quando li visualizzi in Eclipse, probabilmente significa che non stai guardando il file con l'editor di confronto corretto.Prova a fare clic con il pulsante destro del mouse sul file nella vista Progetto o nella vista Sincronizza e seleziona "Modifica conflitti" per visualizzare un editor di confronto che mostrerà le regioni in conflitto graficamente anziché come testo.Tieni presente che l'editor di confronto che appare per "Modifica conflitti" è diverso da quello che ottieni quando fai semplicemente doppio clic su un file nella vista Sincronizza: l'editor di confronto con doppio clic mostra le differenze tra il tuo file corrente e il modo in cui esisteva l'ultima volta che l'hai estratto o aggiornato, mentre la finestra di dialogo di confronto dei conflitti di modifica mostra le differenze tra due origini di modifiche (ad esempio, le modifiche che hai unito rispetto alle modifiche esistenti nell'area di lavoro prima dell'unione).

In secondo luogo, potresti voler essere a conoscenza di un bug in alcune versioni del plugin sovversivo Eclipse che fa sì che tutti i file che hanno accettato le modifiche di unione vengano contrassegnati erroneamente come aventi conflitti.Questo bug è stato corretto, ma molte persone non sembrano aver ancora aggiornato per ottenere la correzione.Ulteriori dettagli qui:

https://bugs.eclipse.org/bugs/show_bug.cgi?id=312585

Ricorda che con svn ripristinare un albero modificato in uno stato pulito è abbastanza semplice.Basta avere uno spazio di lavoro pulito sul ramo di destinazione dell'unione ed eseguire il comando di unione per importare le modifiche dal ramo di origine dell'unione, quindi sincronizzare l'area di lavoro e otterrai la solita finestra di confronto di Eclipse che mostra tutti i file modificati dall'unione e i conflitti.

Se per qualche motivo non riesci a risolvere i conflitti puoi ripristinare svn sul progetto e tornare a uno stato pulito, altrimenti esegui l'unione sul posto e una volta terminato puoi impegnarti.Nota che non devi impegnarti, una volta che hai finito di gestire i conflitti puoi anche tornare alla vista sviluppatore, verificare che il codice venga compilato, eseguire i test unitari, qualunque cosa e poi sincronizzarsi di nuovo ed eseguire il commit (una volta che il conflitto è localmente risolto che non torneranno)

l'ultima volta che ho guardato, quando usi il comando di unione subclipse sovrascriverà il file unito (usando i marcatori di conflitto per mostrare aree in conflitto) e metterà il lato sinistro e destro originale dell'unione nello stesso posto.non dovrebbe inserire nulla in directory diverse.

Come regola generale, è meglio eseguire il commit di tutte le modifiche dell'unione in un unico commit e avere solo le modifiche dell'unione nel commit in modo da poter eseguire il rollback dell'unione in un secondo momento, se necessario.

Lo strumento di unione di openCollabNet per subclipse è piuttosto carino.Sono disponibili molti tipi di fusione e l'unione che ho appena eseguito con essa è stata fluida.Lo consiglio.

L'unica cosa che manca nella sincronizzazione della vista in Eclipse è la capacità di check-in.Nella visualizzazione Sincronizzazione team posso visualizzare tutte le mie modifiche e risolvere i conflitti, quindi sarebbe piuttosto intuitivo effettuare il check-in direttamente da lì invece di tornare alla visualizzazione Java ed eseguire il check-in.

Sono arrivato qui perché stavo cercando un modo per unire in un editor di unione esterno (KDIFF3) ma avviare l'unione da Eclipse.Non ero soddisfatto delle risposte fornite sopra.Quindi ecco come configurare kdiff3 come editor di unione e diff per SVN in Eclipse:

Vai a Windows -> Preferenze → Team -> SVN -> Diff Viewer Aggiungi una nuova configurazione (Aggiungi pulsante):Estensione o tipo MIME:* - se lo desideri puoi specificare tipi MIME diversi per editor diversi, non ne avevo bisogno quindi un po'.

Diff:Percorso del programma C:\Programmi\KDiff3\kdiff3.exe (o ovunque tu abbia il tuo editor di unione - scusa per il percorso di Windows, sentiti libero di aggiungere una versione di Linux nei commenti o modificare questa risposta.)

Argomenti:${base} ${mio} ${loro}

Unisci:Percorso del programma C:\Programmi\KDiff3\kdiff3.exe

Argomenti:${base} ${mio} ${loro} -o ${unito}

Probabilmente funzionerà anche per altri editor di unione, ma con una sintassi degli argomenti diversa (capiscilo e facci sapere :)).

L'utilizzo è come al solito (team->modifica conflitti) per l'unione e confronto->foo per la visualizzazione delle differenze.

Saluti

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