L'inconveniente della fusione in SVN prima della v1.5 è ormai obsoleto quando la mancanza di metadati non è più il caso?


11

Sto iniziando con SVN e molte fonti affermano che la fusione è molto difficile in SVN rispetto agli strumenti DVCS. Le domande più recenti che ho potuto trovare qui su SE sono del 2012.

A volte si dice che la ragione è che SVN prima della v1.5 non aveva metadati, ma SVN è ora alla versione 1.8.9.

Dato che SVN è ora molto più maturo della v1.5, e in particolare il fatto che non abbiamo usato SVN 1.5, quindi non soffriamo della menzionata mancanza di metadati - c'è ancora molta validità in quegli argomenti contro SVN?

Capisco che DVCS abbia un approccio completamente diverso, che è spesso più desiderabile, ma per coloro che "devono" utilizzare SVN per qualsiasi motivo, la fusione non è più "inferno", vero?


3
@ TorbenGundtofte-Bruun - In questo momento non ho il tempo di dare una risposta del genere, ma dirò "non temere SVN". Ha dei limiti, ma anche i DVCS.
kdgregory,

Risposte:


15

Funziona bene se ti attieni ai casi semplici , ma ce ne sono alcuni complessi che non lo fanno.

Le limitazioni che mi vengono in mente:

  • Può trovare l'antenato più recente solo se si trova su uno dei rami coinvolti. Quindi, se si crea branches/thise branches/thatsia da trunke quindi provare a fondersi branches/thisper branches/that, non si sa cosa fare. Ciò significa che puoi unire il ramo da o verso il suo genitore. Potresti imbatterti in questo se avvii due rami di caratteristiche e successivamente ti rendi conto che le caratteristiche sono interdipendenti e devi combinarle.

  • Mentre afferma di poter tracciare i nomi, l'unione dei rami quando i file sono stati spostati da un lato e modificati dall'altro non sempre trova i file giusti da unire e ripararli manualmente è un po 'noioso in quanto non lascia le informazioni necessarie ovunque in mano.

  • I file aggiunti a volte causano conflitti spuri nelle successive fusioni.

  • Dal momento che sovversione non ha un concetto separato di ramo, puoi unire solo una sottostruttura di un progetto e questo può portare a un gran casino abbastanza rapidamente. Si consiglia vivamente di unire sempre i rami completi. Sfortunatamente per qualche motivo a volte le proprietà delle informazioni di unione appaiono nelle sottodirectory anche se sembrano superflue e l'unione è stata eseguita correttamente per l'intero ramo.

  • Ultimo ma non meno importante, è lento . La fusione su un progetto di qualsiasi dimensione seria richiede spesso minuti in cui la maggior parte dei DVCS può farlo in meno di un secondo.


+1, ottima risposta. Il punto riguardante l'antenato comune è qualcosa che dovrò cercare. Hai qualche riferimento per questi fatti?
Doval,

1
@Doval: esperienza.
Jan Hudec,

forse vale anche la pena ricordare che svn non ha neanche un concetto separato di tag
jk.

Per quanto riguarda il tuo primo punto elenco (grazie per una spiegazione molto chiara!) Non è stato possibile risolverlo utilizzando un ramo di accumulazione che ha lo stesso punto di diramazione dei rami delle caratteristiche? (basato su Vance98 ) Il problema si verifica davvero solo quando i due rami delle caratteristiche hanno punti di diramazione diversi?
Torben Gundtofte-Bruun,

@ TorbenGundtofte-Bruun: l'antenato comune più recente non deve essere un punto di diramazione. Puoi trovarlo tu stesso e dire a Subversion di applicare le modifiche tra le revisioni di pegging specifiche. Ma il problema è che è un sacco di lavoro e devi capire che devi farlo, perché la sovversione non necessariamente genera le sue mani dicendo che non può fondersi. Invece può trovare un antenato non recente e generare molti conflitti.
Jan Hudec,

1

Dalla mia esperienza, la fusione in SVN è stata "risolta" nella versione 1.6. Lavoro sia in Mercurial che in SVN, e dalla versione 1.6 di SVN, la fusione sembra avere lo stesso lavoro su entrambe le piattaforme. L'unica eccezione potrebbe essere che è necessario ricordare di fornire l' --reintegrateopzione quando si ricollega da un ramo al trunk utilizzando SVN.

Questa è solo la mia esperienza operativa. Non so nulla degli interni di SVN.


2
1.8 può finalmente rilevare il caso "reintegrare", per fortuna. Ma questo si occupa solo dell'antenato comune più recente su locale o remoto. Non riesce ancora a trovarlo sul terzo ramo.
Jan Hudec,
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.