2010-01-14 15 views
17

Sono molto nuovo a Subversion, ma ho usato altri sistemi di controllo di revisione come ClearCase per anni.Subversion non può unire dopo uno spostamento

Il mio capo mi ha chiesto di sistemare questo progetto in modo che potesse essere costruito con Maven anziché Ant. Una delle cose più importanti che dovevo fare era spostare src/com a src/main/java/com e spostare test/com a src/test/java/com, cosa che ho fatto usando il comando svn mv. Ho asserito stupidamente che da quando ho usato i comandi di Subversion per spostare le directory, allora Subversion avrebbe saputo che le cose erano state spostate. E quando ho unito il mio ramo nel bagagliaio, sembrava funzionare. Ma ora qualcun altro ha appena finito di lavorare su un ramo che si è ramificato prima del mio lavoro. Quindi andiamo a fondere le sue cose nel bagagliaio, e fondamentalmente Subversion sembra pensare "ok, ha apportato delle modifiche a src/com/foo/bar/baz.java, ma quella directory non esiste più, quindi è irrilevante, quindi scartalo" invece di quello che mi aspettavo , che era "ok, ha apportato le modifiche a src/com/foo/bar/baz.java, ma src/com è stato spostato, quindi ho bisogno di unirlo in src/main/java/com/foo/bar/baz.java".

C'è un modo per fare in modo che Subversion esegua la gestione delle revisioni, o ho intenzione di unire manualmente le modifiche di questo ragazzo per i prossimi due giorni?

+1

Ho appena morso anche da questa "caratteristica". E sto cercando di evitare l'incubo che si fonde manualmente. – granadaCoder

risposta

12

Per rispondere alla tua domanda direttamente:

C'è un modo per rendere Subversion fare la gestione delle revisioni, o sto andando essere manualmente unione dei cambiamenti di questo ragazzo per i prossimi due giorni?

Dovresti essere in grado di renderti un po 'più facile.

Una cosa che si può fare per alleviare alcuni del dolore (assumendo un layout come segue)

/branch/foo/src/com 
/branch/foo/test/com 
/trunk/src/main/java/com 
/trunk/src/test/java/com 

Prima si è spostato src/com a src/main/java/com e test/com a src/test/java/com si poteva fare:

cd $TRUNK 
svn merge -r N:M http://server/branch/foo . 

Che cosa si potrebbe fare ora è:

cd $TRUNK 
svn merge -r N:M http://server/branch/foo/src/com src/main/java/com 
svn merge -r N:M http://server/branch/foo/test/com src/test/java/com 

Spero che questo aiuti a risparmiare un po ' tempo.

+0

Ah amico, vorrei averlo visto prima di unire manualmente tutto. –

2

Questo suona come un problema occasionale. Ti suggerisco di utilizzare svn diff > /to/some/file.patch (o diff normale) per salvare le sue modifiche in un file, quindi applicarlo sul bagagliaio spostato con patch -p0 < /to/some/file.path.

0

Chiunque ha provato questo software? xMerge

Questo è un plugin per SmartSVN ma sembra che faccia il trucco. Se qualcuno lo sta usando, sarei grato se mi mandasse una recensione.

0

Ho appena avuto lo stesso problema e l'ho risolto con git. Non volevo unire i moduli server con svn merge -r N:M http://server/branch/foo/test/com src/test/java/com per src/main, src/test e resources.

Quindi ho usato git svn clone file:///some/repo -T trunk -b branches -t tags.In questo modo sono riuscito a mantenere git master in sincronizzazione con tronco svn e unirlo con il mio ramo . Quando ho finito, ho unito il ramo git a git master e da li a tronco svn.

Problemi correlati