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.