Reintegrare può essere utilizzato solo se le revisioni da X a Y sono state precedentemente unite da <URL> per reintegrare l'origine, ma non è così


127

State usando le filiali SVN con Tortoise 1.6. Unisco periodicamente il tronco nel ramo per tenerlo aggiornato.

Oggi, ho pensato di reintegrare il ramo. Ho scelto "Reintegrare un ramo" da Tortoise e ho ricevuto il seguente messaggio di errore:

Reintegrare può essere utilizzato solo se le revisioni da 4709 a 5019 sono state precedentemente unite http://subversion/svn/saxdev/trunkalla fonte reintegrata, ma non è così

Ha quindi elencato circa 50 file con descrizioni come questa:

Error: branches/qst/kobalt/sax/businessobjects/util/HistoryParent.java

Error: Missing ranges: /trunk/kobalt/sax/businessobjects/util/HistoryParent.java:4709-5018

La revisione 5019 è la revisione principale. La revisione 4737 è stata la revisione quando ho creato un ramo.

Ho questo dal registro per la revisione 4737

Azione: percorso aggiunto: / rami / qst Copia dal percorso: / tronco

Per me, quel messaggio di errore dice che il ramo non era originariamente dal trunk, il che non è vero.

Qualche idea?


1
Va bene. Non uso più Subversion, ma ci penserò su!
Colinjwebb,

1
Grazie amico. Penso che la pagina sia migliore per questo.
Gray,

Risposte:


138

Se stai lavorando su un ramo e lo hai tenuto aggiornato con altri lavori potresti essere confuso quando crei una copia funzionante del trunk e provi a reintegrare il tuo ramo se ricevi un messaggio simile al seguente:

$ svn merge --reintegrate https://server.blah/source/orb/branches/bronze_services
svn: Reintegrate can only be used if revisions 650 through 694 were previously merged from
     https://server.blah/source/orb/trunk to the reintegrate source, but this is not the
     case:
  branches/bronze_services/occl
    Missing ranges: /trunk/occl:650-693

Ho visto una serie di soluzioni alternative su Google ma mi hanno reso nervoso come "hack". Per affrontarlo ho deciso di fare esattamente ciò che la sovversione sta suggerendo nel messaggio. Sono tornato al mio ramo e ho unito esplicitamente le revisioni specificate:

$ svn merge -r 650:693 https://server.blah/source/orb/trunk
$ svn commit -m 'merged revisions 650:693 from trunk'
    Sending        occl
Committed revision 695.

Una volta fatto questo, sono stato in grado di tornare alla copia di lavoro del trunk e reintegrare il ramo senza problemi.

Spero che aiuti


16
Bello! "fai esattamente ciò che la sovversione sta suggerendo nel messaggio". :)
Adam,

7
Sono d'accordo, la risposta più popolare è allettante, ma probabilmente è meglio risolverla correttamente. Ho dovuto andare al file problematico specifico e svn mergedal tronco.
Steve Kehlet,

1
Questo ha funzionato alla grande per me. Il trucco principale era che Tortoise non mi stava dicendo la revisione del problema. Dopo aver aggiornato il mio client svn della riga di comando sono stato in grado di ottenerlo per darmi un messaggio come te, quindi sono stato in grado di unire la revisione del problema e tornare al trunk.
user12861

7
Questo non ha funzionato per me perché le fusioni "mancanti" elencate erano già state fatte nel ramo (reintegrare l'origine).
Sam,

6
Mentre questa risposta sembra ragionevole, non ha funzionato per me. Continuavo a ricevere gli stessi messaggi di errore. Ciò che ha aiutato, è stato rimuovere le proprietà svn: mergeinfo dai file elencati, proprio come suggerisce la risposta accettata.
Jenny O'Reilly,

85

[[Sebbene la mia soluzione abbia funzionato per me in passato, può portare a risultati impropri con i moderni client SVN. Nel nostro caso, gli errori di fusione sembravano essere il sottoprodotto di automazioni che confondevano la nostra storia SVN e non la vera attività. Lascio questo qui per i posteri, ma per favore considera invece la risposta accettata. ]]

La soluzione per me è stata quella di rimuovere tutte le svn:mergeinfoproprietà che in qualche modo si attaccano ai singoli file nella gerarchia.

svn merge --reintegrate svn+ssh://svn/usr/local/svn/repos/all/trunk 
svn: Reintegrate can only be used if revisions 18765 through 18921 were
    previously merged from svn+ssh://svn/usr/local/svn/repos/all/trunk to the
    reintegrate source, but this is not the case:
trunk/proj/src/main/java/com/foo/furniture.java
Missing ranges: /trunk/proj/src/main/java/com/foo/furniture.java:18765-18920

Per trovare i file con le informazioni di mergeinfo puoi fare:

cd ~/svn/branches/2.7
svn propget -R svn:mergeinfo .

Quindi è possibile rimuovere le proprietà mergeinfo:

svn propdel svn:mergeinfo proj/src/main/java/com/foo/furniture.java ...
svn commit -m 'removed mergeinfo' proj/src/main/java/com/foo/furniture.java ...

Dopo aver completato questo, la mia unione è stata eseguita correttamente.


2
Questo mi ha davvero aiutato a risolvere il mio problema, ma il mio era dovuto alla fusione di una revisione da una cartella figlio piuttosto che a farlo nella cartella principale. Il mio problema era: avevo eseguito l'unione ma la cartella principale non aveva riconosciuto che l'unione era avvenuta, questo significava che dovevo aggiornare manualmente il supporto mergeinfo con i numeri di revisione mancanti. NOTA Potrei farlo solo perché non ci sono state altre modifiche ai file per la revisione e provocherebbero comportamenti imprevisti se si dovessero unire altri file - in questo caso sarà necessario unire nuovamente le revisioni.
Ordine di esecuzione

5
In TortoiseSVN, è possibile fare clic con il pulsante destro del mouse sul file, selezionare "TortoiseSVN" -> "Proprietà" ed eliminare la proprietà svn: mergeinfo.
StarCub,

3
@StephenKennedy Potresti riscontrare il problema di riutilizzare un ramo che è già stato reintegrato. In tal caso, consulta l'ultima sezione di svnbook.red-bean.com/it/1.7/… che inizia con "Una volta eseguita un'unione - reintegrate da un ramo all'altro, il ramo non è più utilizzabile per ulteriori lavori."
AlexMA,

6
+1. Non è necessario eliminare tutti i mergeinfos; solo quelli che hanno intervalli mancanti. Vedi la mia risposta per un modo per eliminare solo il problema mergeinfos filtrando l'output dell'errore TortoiseSVN.
Iain Samuel McLean Elder,

4
-1. Non dovresti rimuovere le proprietà di mergeinfo a meno che non sei davvero sicuro di quello che stai facendo. Molte persone possono leggere questo, eliminare queste proprietà e introdurre inavvertitamente altri problemi. Paul Whipp ha una risposta migliore.
Bizmarck,

15

Se provi a reintegrare il tuo ramo nel trunk e visualizzi errori come questo da TortoiseSVN:

Unisci test di reintegrazione non è riuscito !: "Reintegrare può essere utilizzato solo se alcune revisioni sono state precedentemente unite dal trunk, ma non è così"

Fai clic sul testo dell'errore e premi CTRL+ A, CTRL+ Cper copiare tutto il testo.

Incolla il testo nella stringa qui di questo script PowerShell:

@"
Command: Reintegrate merge http://svn.cloudcorp.com/branches/myproject into C:\Users\iain\Documents\Repositories\CloudCorp\trunk  
Error: Reintegrate can only be used if revisions 18089 through 18612 were previously  
Error:  merged from http://svn.corp.skyscanner.local/svn/SkyScannerDatabase/trunk to  
Error:  the reintegrate source, but this is not the case:  
Error:    
Error:  branches/myproject/userdata/usermanagementservice  
Error:   
Error:     Missing ranges:  
Error:  /trunk/userdata/usermanagementservice:18365,18404  
Error:    
Error:  branches/myproject/userdata/auto_create_db.sql  
Error:   
Error:     Missing ranges:  
Error:  /trunk/userdata/auto_create_db.sql:18406  
Error:   
Error:    
Error:  branches/myproject/userdata/create_audit_tables_triggers_uds.sql  
Error:   
Error:     Missing ranges:  
Error:  /trunk/userdata/create_audit_tables_triggers_uds.sql:18406  
"@ -split "`n" |
? { $_ -match ('Error: +branches') } |
% { $_.Substring($_.IndexOf('userdata')) } |
% { "svn propdel svn:mergeinfo $_" }

Lo script estrae i percorsi relativi dei file con problema mergeinfo e genera un elenco di comandi per risolverli ciascuno.

Potrebbe essere necessario modificare il 'userdata'valore in base alla struttura del repository.

Eseguire lo script per generare i comandi necessari per rimuovere il problema mergeinfos.

In questo esempio, lo script produrrebbe questo output:

svn propdel svn:mergeinfo userdata/usermanagementservice  
svn propdel svn:mergeinfo userdata/auto_create_db.sql  
svn propdel svn:mergeinfo userdata/create_audit_tables_triggers_uds.sql  

Al prompt dei comandi è possibile accedere alla base del ramo (myproject) ed eseguire i comandi per eliminare il problema mergeinfos.

Dovresti vedere un output in questo modo:

property 'svn:mergeinfo' deleted from 'userdata\usermanagementservice'.
property 'svn:mergeinfo' deleted from 'userdata\auto_create_db.sql'.
property 'svn:mergeinfo' deleted from 'userdata\create_audit_tables_triggers_uds.sql'.

Come nella risposta di Gray , ora dovresti applicare le modifiche al ramo e provare a reintegrare di nuovo. Questa volta dovrebbe funzionare!


1
Molto prima di reintegrare ho unito (non reintegrato) alcune modifiche al trunk dal mio ramo perché mi sono impegnato accidentalmente nel mio ramo quando intendevo impegnarmi nel trunk. Potrebbe essere la ragione dietro questi errori di reintegrazione?
Iain Samuel McLean Elder il

Questo è esattamente ciò che sembra aver causato questo problema nel mio caso. Grazie per aver dedicato del tempo a scrivere la sceneggiatura!
Sam,

@Sam Sono contento che l'abbia trovato utile. Hai dovuto sostituire lo spazio letterale con uno \s+per farlo funzionare per te?
Iain Samuel McLean Elder,

Una specie di; era più +ciò che era necessario perché funzionasse per me. Nel mio caso, alcune linee avevano due spazi e altre tre, quindi era necessario il supporto per un numero variabile di spazi. Non sono sicuro del motivo per cui ho cambiato lo spazio in a \s; che probabilmente non era necessario, quindi mi dispiace per quella parte!
Sam,

@Sam Non preoccuparti, ma lo cambierò in uno spazio letterale per ora fino a quando TortoiseSVN inizierà a mescolarlo con le schede o altro :-) Ho lasciato il +poiché è stato utile per te.
Iain Samuel McLean Elder il

11

In realtà l'ho risolto usando l'opzione "Unisci due rami diversi" per unire il tronco e il ramo nella mia copia di lavoro. Poi l'ho affidato al bagagliaio.

Meravigliosa


4
Questa risposta non spiega davvero cosa hai fatto. Nessun esempio, nemmeno un collegamento alla sezione richiesta del manuale.
zigg,

Con il senno di poi no. Tuttavia, poiché questa è stata la mia risposta lo stesso giorno della domanda, è stata la risposta migliore per alcuni mesi. Vorrei presumere che abbia senso se usi ancora Tortoise SVN 1.6. Ora ho accettato la risposta di Gray come risposta accettata.
Colinjwebb,

Esempio: svn merge ^ / tags / wx ^ / tags / yz. L'errore di reintegrazione è emerso per me durante l'utilizzo di 1.8 e la fusione nel trunk in cui l'origine di unione aveva avuto una revisione specifica precedentemente unita in esso dal trunk. 1.8 sembrava decidere che si stava tentando una fusione reintegrata, cosa che non avveniva. Un'unione a secco con 1.6 funzionerebbe bene, ma anche l'unione dei due URL si adattava.
Nick,

1
Lo scenario preciso che falliva con 1.8 stava copiando un tag da alcune revisioni indietro per un rilascio di patch, ciliegiando su una modifica dal trunk al backport mediante un'unione nel tag patchato, apportando un'ulteriore modifica al tag patchato e fondendolo nel bagagliaio. Le modifiche tra il tag di base e la versione con patch sono ciò che è necessario ricollegare al trunk, e una fusione 2 URL funziona a meraviglia.
Nick,

Avrei dovuto leggere questa risposta prima di passare 3 giorni a cercare di capire cosa stesse succedendo. Ancora non capisco perché ho avuto questo problema, ma sospetto che il commento di @Nick sia la ragione - e ora le cose stanno funzionando non guarderò oltre ...
Dave Richardson

6

Qualcosa che ha funzionato per me nella tartaruga SVN: invece di unire tutte le revisioni dal ramo, scegli un intervallo specifico e seleziona manualmente tutte le tue revisioni dal ramo.


1
Grazie per un'idea così basilare. Di tutte le risposte, questa non era solo la meno complicata, ma era l'unica che ha funzionato per me.
Redman il

3

Fai come SVN ti sta dicendo.

  1. Unisci il ramo della Reversion che ti dice SVN
  2. Reintegrare dal ramo al tronco

2
Non ha funzionato per me. Le modifiche esistevano già nel ramo. Le tue istruzioni sembrano funzionare in alcuni casi, ma sembrano basate su un presupposto, quindi non sembrano universali.
Sam

1

Vedi anche la mia risposta qui per la mia esperienza con un caso simile. Non sono sicuro che questa sia la fonte del tuo problema, ma sembra che Subversion 1.8 abbia problemi con mergeinfo quando due modifiche si annullano a vicenda.


0

Ho riscontrato questo problema. Ho fatto un registro SVN sul mio ramo per scoprire dove avevo unito il tronco al mio ramo.

Ho notato tutte le revisioni.

Ho quindi unito l'unione del mio ramo al trunk specificando manualmente le revisioni. Ho specificato tutti gli intervalli per escludere le revisioni in cui ho unito il trunk. Riesco a fondere il mio ramo.

Ho dovuto fare alcuni ripristini su mergeinfo, ma il mio codice è stato unito.

Ho immediatamente cancellato il mio ramo.


0

Ho ricevuto questo errore dopo aver utilizzato un checkout parziale di un ramo. Stavo aggiornando il ramo con il tronco ma le revisioni del tronco per parti del ramo che non erano state estratte non stavano ovviamente aggiornando. La correzione consisteva nel fare un checkout completo del ramo e quindi unire tutte le modifiche del trunk. Dopo averli commessi sul ramo, ho potuto unire il ramo al tronco con successo.


0

Ho riscontrato questo problema

  • TortoiseSVN 1.9.7, Build 27907-64 Bit, 2017/08/08 19:34:38
  • Subversion 1.9.7, -release
  • aprile 1.5.2
  • apr-util 1.5.4
  • servo 1.3.9
  • OpenSSL 1.0.2l 25 maggio 2017
  • zlib 1.2.8
  • SQLite 3.14.1

fai clic con il pulsante destro del mouse sul ramo in cui desideri unire (ma ricevi questo messaggio) e seleziona l'opzione "aggiorna alla revisione" e quindi nella finestra di dialogo che si apre (schermata seguente) seleziona quelle revisioni e fai clic su OK - una volta che tutte le revisioni precedenti sono state unite, non riceveresti questo messaggio

inserisci qui la descrizione dell'immagine

Aggiungendolo qui per aiutare qualcuno che sta usando Tortoise SVN


-1

So che questo è un vecchio post, ma stavo faticando a risolvere questo problema fino a quando non ho scoperto che i file elencati nel messaggio di errore hanno problemi di proprietà SVN.

Ho fatto clic con il pulsante destro del mouse sui file problematici: TortoiseSVN> Proprietà e ho scoperto che il file aveva due svn: mergeinfo e uno di questi non aveva ereditato dai dati. Quindi ho rimosso quel mergeinfo.

Uso TortoiseSVN 1.12.2, Build 28653 - 64 Bit.

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.