Usando SVN male - Mercurial è la risposta?


13

Al lavoro usiamo SVN, ma solo nel nome. Non ramifichiamo o fondiamo. Conserviamo due copie del repository, una che funge da ramo "tag" che viene copiato quando eseguiamo una distribuzione e conservato per correzioni di bug e funzionalità immediate di tipo "questo deve andare al più presto". Dobbiamo ricordare di copiare le modifiche apportate in una copia all'altra copia (il "trunk"). Abbiamo una dozzina di progetti all'interno di una singola cartella nel repository, invece di dividerli. In breve, l'unica cosa per cui utilizziamo SVN è la possibilità di impegnarci. Tutto il resto è fatto manualmente.

Ho valutato Mercurial; Ho usato Git in passato (sono l'unico nella squadra che ha usato un DVCS) e sto raccogliendo Mercurial rapidamente. Sto discutendo di presentare Mercurial al resto del team come un "modo migliore" di fare le cose perché la ramificazione è un gioco da ragazzi, la fusione è molto più semplice e possiamo impegnare le cose localmente sul contenuto del nostro cuore e spingerle solo al centro ramo quando sono pronti. Otterremmo tutti i vantaggi di SVN (e non stiamo ottenendo molti benefici in questo momento comunque poiché nessuno capisce davvero SVN) in più per le nuove funzionalità non dobbiamo avere tonnellate di file non controllati che fluttuano quindi se dobbiamo eseguire il rollback Siamo fottuti. Il flusso di lavoro sembra un po 'più semplice: dobbiamo solo ricordare che "Commit" è locale e "Push" è come il commit di SVN,

È un buon approccio da adottare? Tieni presente che il team è molto flessibile e si accompagnerà a tutto ciò che migliorerà la nostra qualità del lavoro e renderà più semplice il modo in cui facciamo le cose - il CIO mi ha persino chiesto quando ho detto che non stavamo usando SVN per il suo potenziale "È c'è qualcosa di meglio che possiamo usare? " quindi anche lui è a bordo.


13
HgInit - Inizia con la rieducazione della sovversione, che ritengo utile.
yannis,

20
Non hai paura che finiranno per usare male anche Hg?
Oded,

6
Penso che un DVCS sarebbe un'idea orribile per la tua situazione, poiché la curva di apprendimento è più alta e chiaramente come organizzazione stai lottando solo per utilizzare le funzionalità di base di SVN. Il passaggio a DVCS dovrebbe avvenire solo dopo aver utilizzato i tag, la corretta organizzazione del repository e le tecniche di fusione appropriate in SVN e aver scoperto che manca ancora per le tue esigenze.
maple_shaft

2
@WayneM La scelta di utilizzare SVN su un DVCS non è necessariamente completamente sbagliata. Alcune persone (me compreso) non hanno alcun problema con l'unione in SVN e scoprono che la maggiore complessità di DVCS supera i benefici percepiti, specialmente se si è un team localizzato più piccolo. Probabilmente non prenderò molto sul serio il DVCS fino a quando non finirò in un grande team di sviluppo in cui la fusione è un grosso problema.
maple_shaft

4
@maple_shaft I will probably not take DVCS very seriously until I end up on a large development teamO fino a quando non si finisce in un team distribuito. Siamo una piccola squadra (5 persone) che lavora da 3 posizioni (e talvolta 5, quando non abbiamo voglia di alzarci dal letto), e il passaggio da svn a hg è stato gradito ...
yannis

Risposte:


15

Sì.

Se sostituisci "SVN" con "Perforce" nel tuo OP hai praticamente la situazione in cui mi sono trovato quando ho iniziato il mio lavoro attuale, anche per la copia con cambio manuale. Dopo due anni siamo su Mercurial e tutti concordano sul fatto che è stato un grande cambiamento.

Abbiamo la capacità di diramare e unire per caso di supporto , il che è incredibilmente utile per il controllo qualità e la capacità di creare un numero qualsiasi di rami e repository usa e getta ogni volta che lo riteniamo opportuno, che possiamo quindi creare e verificare nel nostro server CI, quindi distribuire in un ambiente di test cloud e verificare la funzionalità. Questo è stato di enorme beneficio in termini di tranquillità che quando eseguiamo una distribuzione live, siamo quasi sicuri al 100% che funzionerà (senza problemi di ambiente / DB, che ovviamente sono al di fuori dell'ambito del VCS).

Fondamentalmente, ciò che abbiamo guadagnato passando al mercuriale è respirare spazio. Non dobbiamo più preoccuparci del costo di un ramo, o delle orribili sessioni di unione che inevitabilmente seguivano, tutto è molto più semplice. Usiamo anche FogBugz abbastanza pesantemente, quindi il legame con Kiln (il loro mercurio ospitato) è davvero utile.

Anche il commento sul sito hginit è perfetto , come schema per un flusso di lavoro di controllo della versione che funziona effettivamente (supponendo che lo si adegui al flusso di lavoro di controllo qualità della propria azienda).

L'unico difetto possibile nel spostare i controlli della versione è che avrai bisogno di qualcuno che sia davvero una forza trainante dietro il cambiamento, che è felice di leggere sull'argomento e usare davvero gli strumenti al meglio delle sue potenzialità, che sembra voler fare.

Non sono d'accordo con i commenti sulla dimensione del team e sulla distribuzione del team in merito all'opportunità di utilizzare DCVS. In realtà, si tratta di distribuzione CODICE. Se si verificano più cicli di sviluppo in parallelo, supportando casi su un sistema legacy, o un sacco di funzionalità o persino nuovi sistemi (che a giudicare dal suo funzionamento), trarrai vantaggio dall'uso di un DVCS.


3
-1, se gli sviluppatori hanno già riscontrato tali problemi con Subversion, è estremamente improbabile che "ottengano" un sistema più complesso. La risposta corretta è, come dicono i commenti sulla domanda, una rieducazione di come funziona Subversion (e VCS in generale) ...
Izkata,

1
@EdWoodcock, penso che ciò che hai osservato potrebbe davvero essere dovuto al fatto che la tua squadra ha iniziato con una "lavagna pulita". Il cambio completo di VCS in mercuriale ha significato che tutti dovevano ricominciare da capo e non potevano più dipendere dalle cattive abitudini che avevano utilizzato in SVN. Molte volte è più facile superare le cattive abitudini "ricominciare" in un altro contesto (in questo caso mercuriale).
Angelo,

2
@EdWoodcock: Perforce potrebbe avere la peggior ramificazione di qualsiasi VCS ancora in uso. La ramificazione in SVN è molto più semplice.
Kevin Cline il

1
Qualunque sia il sistema di controllo della versione utilizzato, penso che sia importante "stabilire le regole" e passare il tempo a esaminare tutti gli scenari di utilizzo con il tuo team. Le persone non sono nate sapendo come fare rami, tag e check-in, diversi team fanno queste cose in modi diversi e i sistemi VCS non impongono un flusso di lavoro su un altro. Se i membri del team non sono tutti sulla stessa pagina in termini di aspettative e utilizzo, il controllo della versione diventa un incubo. Questi sono problemi comuni a TUTTI i sistemi VCS.
Angelo,

1
@ChrisS Questa parabola è più applicabile a un VCS standard in cui vi è un costo di ramificazione. Inoltre, si tratta di diramare, impegnarsi e poi fondersi di nuovo, cosa che <i> fai ogni volta che cloni </i> in un DVCS. Inoltre, ho appena spiegato perché l'approccio funziona davvero per noi; essere dogmatici riguardo alla metodologia è abbastanza sciocco.
Ed James,

21

Uno strumento diverso probabilmente non risolverà il tuo problema, direi che dovresti leggere questo articolo, l'ho trovato molto utile:

http://thedailywtf.com/Articles/Source-Control-Done-Right.aspx

Penso che il punto principale dell'articolo sia riassunto qui, ma per favore leggilo:

Alla fine: non proprio sugli strumenti

In tutto il tempo che ho trascorso lavorando e integrando diversi sistemi di controllo del codice sorgente, sono giunto a una conclusione: non è lo strumento, è il modo in cui lo usi. È un'affermazione terribilmente compromessa, ma qui sembra particolarmente vero. Se utilizzato per gestire correttamente le modifiche al codice sorgente - etichettatura per build, diramazioni per eccezione, ecc. - anche il più debole sistema di controllo del codice sorgente (* tosse * SourceSafe * tosse *) supererà di gran lunga un set-up Mercurial con un sacco di commit casuali e spinte.


6
+1, non si tratta davvero degli strumenti. SVN è perfettamente capace come lo è la forza.
Angelo,

1
Si tratta di persone, non di strumenti. Ho visto progetti ben gestiti che utilizzano ancora Concurrent Versions System per il controllo delle versioni, nonché progetti terribili che eseguono GIT o Mercurial ..
Alexander Galkin,

Non si tratta davvero di strumenti, a meno che tu non ne abbia di migliori per complimentarmi con il fornitore del controllo del codice sorgente come github, bitbucket
Chris S

3
Sebbene io sia d'accordo sul fatto che sia il modo in cui usi i tuoi strumenti a contare, è anche vero che strumenti diversi ti guidano in direzioni diverse. Strumenti come Mercurial ti guidano lungo un percorso di semplicità e flessibilità. Git ti porta su un percorso di complessità ma estrema flessibilità, Subversion rende alcune cose più facili di altre, quindi ti allontana dalle cose difficili e difficili, mentre Visual Sourcesafe ti guida su un percorso di estrema flessibilità e frustrazione da capogiro. * 8 ')
Mark Booth,

10

No. La tecnologia raramente risolve questo tipo di problema.

Mercurial è più complesso di Subversion (sì, ramificare e fondere è migliore e forse più semplice, ma il modello di Subversion è molto più semplice di quello di Mercurial). Se stai usando Subversion in un modo così semplice, potresti finire con Mercurial:

  • a) adeguatamente o meglio
  • b) inadeguatamente, ma meglio del tuo attuale utilizzo di Subversion
  • c) Non adeguatamente come ora
  • d) Peggio di adesso

c) ed) sembrano gli esiti più probabili. Scrivi perché pensi che finirai in a) o b).


5

Non posso parlare di come funzionano i team di grandi dimensioni, ma per i team di piccole dimensioni molti di questi grandi problemi SVN non sono in realtà problemi SVN ... Sono problemi di sviluppo. Se non stai seguendo i moderni standard di sviluppo (soprattutto, facendo un'integrazione continua), il controllo delle versioni si trasforma nel disordine esatto che stai descrivendo ... Prima di passare a un nuovo sistema assicurati di eseguire un'analisi della causa principale vera sul tuo problema ...


3

No. Gli strumenti non sostituiscono la metodologia.

Se non usi Subversion come SCM , non puoi usare anche Mercurial (e accadrà molto probabilmente)


2

SVN può fare ciò di cui hai bisogno per fare e non è necessario cambiare i cavalli a metà flusso per un risultato discutibile.

Qualunque cosa tu faccia, dovrai superare un problema di fiducia. Qualcuno deve essere in grado di convincere tutti a cambiare il loro flusso di lavoro. Questo non è facile anche nelle migliori circostanze, anche se hai logica e fatti dalla tua parte. È una delle cose più difficili da fare in un'organizzazione. Se fallisci o diventa difficile, perdi la fiducia e sarà molto difficile riottenere quella fiducia.

Ci sono un paio di cose che so che le persone hanno provato con successo. Forse uno di loro lavorerà per la tua squadra:

  1. Porta un "allenatore" per fornire una serie di seminari per il team. Questo probabilmente dovrà essere una persona esterna (ironia della sorte, spesso è più facile per molte squadre fidarsi di un estraneo piuttosto che fidarsi di qualcuno nella squadra). Deve essere qualcuno che conosce a fondo le sue cose e che può insegnare efficacemente queste abilità alle persone a tutti i livelli di comprensione e escogitare un piano pragmatico per implementare il nuovo VCS (*) nel flusso di lavoro del team.

  2. Avvia un progetto "skunk-works" per testare e validare il nuovo VCS su un piccolo progetto laterale. Scegli un paio di sviluppatori "alfa" che sono disposti a provare nuove cose e non dispiace accumulare un mucchio di esperimenti senza successo. Quando skunk-works è in grado di dimostrare miglioramenti inconfutabili del CALCESTRUZZO nel flusso di lavoro, puoi quindi provare a distribuirlo al resto della squadra e hai un paio di evangelisti che ti aiuteranno a farlo.

(*) per "nuovo VCS" non intendo necessariamente mercurial o git, può anche essere SVN (fatto bene).

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.