2010-09-24 12 views
6

Sto cercando di mantenere un ramo di funzionalità aggiornato unendo il tronco nel ramo. Il problema è che circa 2000 file che erano lì quando il ramo è stato creato, e che è stato lasciato intatto sul ramo e sul tronco, viene aggiornato con nient'altro che svn: mergeinfo. Il progetto è di dimensioni piuttosto grandi e l'impatto sulla nostra cronologia SVN è così grande da rendere inutilizzabile la cronologia commit merge in quanto segna letteralmente migliaia di file modificati, anche se l'unica modifica a questi file è eseguita da SVN stesso.Come evitare un numero elevato di svn: mergeInfo durante l'unione di un trunk in un ramo di funzionalità in SVN

ho cercato

  • Utilizzando la stessa versione del client come il Repo (1.5.2)
  • Utilizzando la mia attuale versione del client 1.6.10
  • Unione di una serie di revisioni, dall'inizio fino ramo head

Devo dire che ho cercato attentamente la documentazione SVN quando ho provato questo. Quindi nessuna regola deve essere interrotta (ad esempio, nessun sottotesto commutato, copia locale pulita, ecc.)

risposta

8

Bascially per ripulire il repository è necessario eseguire le seguenti operazioni sul ramo di integrazione in modo che i tifosi cambiare fuori da lì: -

C:> svn propdel svn: mergeinfo -R

per esempio, si fallo nel bagagliaio in modo che le future uscite e le diramazioni non siano inquinate. Quando si uniscono i rami esistenti, è possibile ignorare tutte le svn: le modifiche di merginfo al di sotto di "unire root" in quanto verranno comunque ereditate.

ho scritto un blog su questo tema un po 'indietro, che copre in modo più dettagliato: -

ripulire svn: mergeinfo Escrementi http://chrisoldwood.blogspot.com/2010/03/cleaning-up-svnmergeinfo-droppings.html

+0

grazie per questa spiegazione più approfondita su come liberarsene. – NielsBjerg

+1

Mentre l'eliminazione di mergeinfo è un approccio utilizzato di frequente, non è RightWay (tm) a farlo; vedi la risposta di slowdog per ulteriori informazioni. – retracile

1

Se si dispone di tale mergeinfo su file che non sono realmente modificati tu o qualcun altro non si fonde dalla radice di copia di lavoro. . L'unica soluzione è quella di rimuovere svn: mergeinfo dai file, perché l'unica posizione è nella root di copia di lavoro in nessun'altra parte. E un altro punto è necessario aggiornare il repository a 1.6.X ..

+0

L'aggiornamento del repository eliminerà questi problemi o stai solo pensando alle migliori pratiche? – NielsBjerg

+0

Inoltre, se evito che il sottoalbero si unisca in avanti, riuscirò a evitare questi problemi? O l'ugola di informazioni di fusione mi perseguiterà per sempre? – NielsBjerg

6

svn aggiungerà le proprietà mergeinfo ai singoli file se ritiene che la loro cronologia di unione differisca da quella della loro directory padre. Una volta che ciò è successo, ogni unione successiva, non importa quanto innocuo, causerà l'aggiornamento di quelle proprietà mergeinfo. Ho trovato la prima metà di this article utile per capire perché ciò accade.

Se si desidera evitare queste continue modifiche di mergeinfo, è necessario "riordinare" le proprietà di mergeinfo esistenti sul ramo. Il modo più sicuro, ma il più laborioso, è quello di eseguire svn propget -R svn:mergeinfo sul ramo e quindi studiare le differenze tra mergeinfo sui singoli file e mergeinfo della loro directory padre. Potreste scoprire che le differenze sono piccole e che "svn unire" un piccolo numero di revisioni individuali sarà sufficiente per innescare l'elisione di mergeinfo, facendo scomparire tutte le proprietà di mergeinfo.

Se sei sicuro di capire come funziona mergeinfo, puoi anche solo guadare e modificare manualmente o rimuovere mergeinfo dai file incriminati.

+0

La mia comprensione, basata principalmente su questo articolo: http://www.collab.net/community/subversion/articles/merge-info.html è, che non dovrei mai modificare svn: mergeInfo a mano ..? – NielsBjerg

+0

Direi che non dovresti modificare mergeinfo a mano a meno che tu non capisca cosa stai facendo e perché lo stai facendo. Unire revisioni specifiche in determinate directory per ottenere le modifiche di mergeinfo che si desidera (ad esempio un mergeinfo più uniforme, in modo che ogni file non cambi più con ogni unione) è un'idea molto migliore e in genere tutto ciò che serve. L'utilizzo dell'opzione "--record-only" è il metodo successivo "più naturale". La modifica manuale è l'ultima risorsa. In senso più ampio, nessuno di questi "dovrebbe" essere necessario: l'elisione di mergeinfo di svn dovrebbe essere più intelligente di quanto non sia. Forse tra qualche anno sarà: -/ – slowdog

+0

Vedi anche [questo articolo molto dettagliato] (http://blogs.collab.net/subversion/2008/05/subversion-15-m/). – retracile

0

Come io non sono fiducioso con la cieca eliminazione svn:merge-info proprietà, ho hanno implementato uno strumento per analizzare la situazione corrente su una copia di lavoro e rimuovere tutte le revisioni di unione possibili dalle proprietà di merge-info non-root. Dopo ulteriori controlli e controlli umani, è possibile eseguire le modifiche sulla copia di lavoro.

Eccolo: svn-clean-mergeinfo

Non esitate a segnalare qualsiasi problema sul suo utilizzo per farlo migliorata.

Problemi correlati