Quale DVCS (git o hg) è più facile per gli studenti di programmazione? [chiuso]


25

Un po 'di contesto: sono al terzo anno di college. gli studenti sono divisi in gruppi di 4. Quasi tutti lavoreranno sotto Windows (tranne pochi come me che sono su Linux). Come parte del curriculum scolastico, inizieremo presto a lavorare su un progetto per un vero cliente, ma io e un altro team ci chiediamo quale sia il modo migliore per condividere il nostro codice tra loro.

Lavoro part-time da 3 anni e ho avuto molta esperienza con git e mercurial su diversi progetti, quindi non ho alcun problema ad usare un sistema o l'altro. Tuttavia, nessuno dei miei compagni di squadra ha mai usato un sistema di controllo della versione prima. C'è anche un altro team che ha provato a utilizzare SVN ma ha avuto grossi problemi e preferirebbe provare qualcos'altro, quindi hanno chiesto la mia opinione.

I miei pensieri: ho sentito che mercurial + TortoiseHg ha una migliore integrazione sotto Windows, ma mi chiedo se il concetto di teste anonime possa confonderle anche se le spiego. D'altra parte, trovo che i rami git siano più facili da capire per un principiante (chiara separazione del lavoro per ciascun programmatore) ma non funziona altrettanto bene sotto Windows.


2
git ha un sacco di potere abilitato di default, ma tutti quelli con cui ho parlato dicono che mercurial è più semplice da imparare e sono propenso a concordare sulla base delle mie esperienze con entrambi. E sì, gli strumenti mercuriali sono più facili da installare in Windows rispetto ai loro equivalenti git. Detto questo, aspettati di guidare le persone e di indicarle ai tutorial per la prima settimana (o più ...).
wkl,

1
L'utilizzo di un DVCS dall'inizio è probabilmente il modo più semplice per gestire l'unione dei contributi di più collaboratori che lavorano in parallelo. Se trovi confuse le teste anonime, non usarle (supporti mercuriali denominati filiali).
Stephen C. Steel,

2
Di nuovo tempo di collegarti a questo post sul blog? Git è un Harrier Jump Jet .
sbi,

1
Non ho mai capito perché l'intero "troppo difficile da imparare" sia importante. Va bene, quindi ci vogliono 20 minuti per imparare a impegnarsi e diramare e al contrario di 10 ... Un grosso problema?
alternativa il

1
Guarda (uno di loro) passare attraverso hginit.com e intraprendere azioni basate sulle loro reazioni.
Chelmertz,

Risposte:


49

Mercuriale, senza dubbio.

Questo è ovviamente soggettivo e varia da una persona all'altra, ma l'opinione generale è che Mercurial è più facile da brontolare, specialmente per chi non conosce VCS o per chi proviene da una VCS di vecchia generazione.

Punti in mano:

  1. Mercurial è stato sviluppato pensando a Windows ; Git è stato portato. Indipendentemente da ciò che qualcuno ha cercato di dirmi, Git è ancora un cittadino di seconda classe su Windows. Le cose sono nettamente migliorate negli ultimi anni, ma si vedono ancora molti battibecchi sul perché qualcosa funziona / o non funziona su Windows come nella scatola * nix. TortoiseHg funziona molto bene e le implementazioni di Visual Studio sono ancora più facili da usare senza interrompere il flusso di lavoro.

  2. Se qualcuno inizia la discussione "Git è più potente dopo di te ...", allora sta praticamente dicendo tutto. Per il 95% degli utenti Mercurial sembra più intuitivo. A partire da una mancanza di indice, alle sue opzioni più intuitive (i selettori di opzione sono coerenti), ai suoi numeri locali per i commit invece degli hash SHA1 (chi ha mai pensato che gli hash SHA1 siano facili da usare ??!)

  3. I rami di Mercurial non sono meno potenti di quelli di Git. Post che descrive alcune delle differenze. Tornare ad alcune revisioni precedenti è semplice come "aggiorna vecchie revisioni". A partire da lì; fai un nuovo commit. I rami nominati sono disponibili anche se si desidera utilizzarli.

Ora, so che tutti questi sono dettagli, e possono essere appresi e tutto, ma il fatto è ... queste cose si sommano. E alla fine, uno sembra più semplice e più intuitivo di un altro. E il sistema di controllo delle versioni non dovrebbe essere qualcosa in cui si passa il tempo all'apprendimento: sei lì per imparare a programmare e poi a programmare; VCS è uno strumento.

Solo per notare; Uso Git e Mercurial ogni giorno. Non avere problemi a usarne uno. Ma quando qualcuno mi chiede una raccomandazione, consiglio sempre Mercurial. Ricordo ancora, quando è arrivato per la prima volta nelle mie mani, mi è sembrato molto intuitivo. Nella mia esperienza, Mercurial produce solo meno WTF / minuto di Git.


4
+ per "VCS è uno strumento". Non avevo considerato le "piccole cose" come un fattore, ma è vero che quando si sommano piccoli problemi qua e là possono diventare un vero fastidio.
Gregory Eric Sanderson,

8
"Il sistema di controllo della versione non dovrebbe essere qualcosa che si dedica al tempo all'apprendimento." Questo è un sacco di merda. Dovresti sempre dedicare del tempo all'apprendimento dei tuoi strumenti. Passi il tempo ad imparare il tuo compilatore; ma VCS è uno strumento tanto critico per la tua programmazione quanto lo è il tuo compilatore.
JesperE,

9
+1. Soprattutto l'argomento "cittadini di seconda classe su Windows" è assolutamente importante in questa situazione.
tdammers,

+1 per "WTF (s) / minute" ( osnews.com/story/19266/WTFs_m ). Questi ragazzi devono imparare l'abilità :-)
Ross Patterson,

1
@Mark è solo il risultato di una differenza terminologica ... Un ramo in Git è davvero solo un nome.
alternativa il

10

Ho scoperto che l'interfaccia utente di TortoiseHg è un'ottima esperienza su Windows. Quando ho sperimentato Git in passato, ho finito per andare invece alla riga di comando. Per il tuo utente medio, una buona interfaccia utente è molto più accessibile di una riga di comando. Quindi, suggerirei di usare Mercurial. (Include anche un bel grafico di diramazione nella finestra del banco di lavoro. Dovrebbe chiarire le difficoltà di ramificazione di base.)

Una volta che capiscono le cose dalla prospettiva dell'interfaccia utente, possono finire per andare alla riga di comando per eseguire script o eseguire operazioni manuali, ma non è necessario.


Essendo un "drogato di console", non avevo mai usato prima le app Tortoise {Svn, Git, Hg}, quindi non sapevo che TortoiseHg avesse un grafico di rami. Devo andare a dare un'occhiata
Gregory Eric Sanderson,

4

Se sei interessato a una terza opzione, suggerirei fossili . Trovo che la possibilità di lanciare un web server temporaneo per condividere il codice funzioni alla grande in piccoli progetti. Fossil è solo un eseguibile, quindi potresti metterlo e la tua fonte in una chiavetta USB e usarlo da qualsiasi computer universitario.

Utilizzalo fossil uiper avviare un server web temporaneo ovunque tu sia per far sincronizzare i tuoi compagni di studi con te. Ti dà anche un sistema di ticket, wiki e un'interfaccia web facile da usare per cambiare filiali e contrassegnare i commit.

Assicurati solo che leggano la guida di avvio rapido e / o il libro . Infine, esiste un progetto chiamato winFossil per offrire loro un'interfaccia utente più amichevole rispetto all'interfaccia utente web.


Ho sentito cose positive sui fossili, ma sfortunatamente non ho molto tempo per familiarizzare con un nuovo DVCS. Preferisco usare qualcosa a cui sono abituato (se possibile) poiché so già come aggirare le insidie ​​più comuni. Ma grazie per il suggerimento, lo esaminerò sicuramente una volta che avrò il tempo.
Gregory Eric Sanderson,

+1; il fossile è poco conosciuto ma è così facile da lavorare e così autonomo (dvsc + wiki + ticket + webserver) che è una vera alternativa all'intero trac o persino a github.
Javier,

Ma il fossile non avrà un bell'aspetto sul curriculum degli studenti come git o hg, poiché pochissimi ne hanno difficoltà.
Ian

Mercurial ha integrato anche la funzionalità hg serve. Manca ovviamente un tracker di bug e wiki. Ma poi c'è anche bitbucket.com
Johannes Rudolph,

3

Dato che i team sono nuovi nel controllo delle versioni e molti usano Windows, consiglierei mercurial su git.

Il modello concettuale del controllo di versione utilizzato da Git e Mercurial è molto simile, quindi una volta che hai imparato l'uno, è facile raccogliere l'altro (e per ragioni simili, è abbastanza facile convertire un repository da uno all'altro) . Questo significa che non è un grosso problema se cambi idea in seguito.

Secondo me, mercurial è più facile da imparare per i nuovi utenti. Rende le cose semplici facili e pericolose quelle difficili. Git semplifica le operazioni pericolose (facile da eseguire, non necessariamente facile da eseguire correttamente!).

Anche l'interfaccia TortoiseHg per Winodows è molto bella, ed è un altro argomento a favore dell'utilizzo di mercurial.


2

La mia preferenza personale è per git.

Tuttavia, poiché alcune persone useranno Windows ed esiste il superbo tutorial hginit , consiglierei di insegnare loro mercurial.


+1 per menzionare hginit. Anche Pro Git è abbastanza buono.
Tamás Szelei,

@ TamásSzelei, grazie, non avevo mai visto Pro Git prima.
dan_waterworth,

0

Come molte persone hanno suggerito, Mercurial via TortoiseHg ha una barriera molto bassa all'ingresso.

Per quelli su Windows è un singolo programma di installazione piuttosto che due programmi di installazione (e un sacco di cose che potrebbero non voler conoscere) e l'interfaccia utente THg è molto più raffinata di TortoiseGit + Msysgit .

Teste anonime

Se pensi che sarebbero confusi da teste anonime, quindi non incoraggiarne l'uso. La maggior parte dei hglibri ha un approccio equilibrato e insegna sia rami topologici che nominati e lascia che il lettore determini quale sia il più appropriato per il loro uso.

Rami nominati

Una cosa che mi manca davverogit è hgil nome dei rami , quindi questa è un'opzione. giti rami vanno bene mentre ci stai lavorando, ma una volta che hai unito quel lavoro in un altro ramo, perdi gran parte del contesto per quei cambiamenti.

In hgpuoi creare un ramo chiamato Jira#1234ed essere sempre in grado di trovare tutte le revisioni associate a quella correzione . In git, una volta che il tuo ramo viene unito e il ref eliminato, devi dedurre quali revisioni facevano parte della correzione dalla topologia dell'albero delle revisioni. Anche se non elimini l'arbitro, conosci ancora l'ultimo commit su quel ramo, non quale dei suoi antenati faceva parte di quella catena di commit.

segnalibri

In alternativa, se non si desidera utilizzare i rami con nome, ma si desidera un gitflusso di lavoro di stile con i rami anonimi, è possibile utilizzare invece i segnalibri .

Questo potrebbe essere il migliore dei due mondi: imparano un gitflusso di lavoro, ma usano i hgcomandi più semplici .

Area indice / cache / staging

Personalmente, penso che gli studenti abbiano molte più probabilità di essere confusi gitdall'indice / cache / area di gestione temporanea che dalle hgteste anonime. Preferisco di gran lunga hgrendere opzionale questa funzionalità avanzata sulla riga di comando, oltre a gitpensare che tu voglia / debba sempre usarla.

Penso anche che l'area di stadiazione incoraggi impegni che non sono stati testati o addirittura compilati. Dal momento che molti dei posti in cui ho lavorato hanno avuto un non commit se non compila la regola, preferirei piuttosto accantonare / nascondere le modifiche che non voglio in questo momento, rieseguire unit test e eseguire il commit di una versione che Conosco compilazioni.

Quando in seguito vieni a rintracciare un bug usando hg bisect o git bisect , ti ringrazierai di poter testare tutte le revisioni, non solo quelle che vengono compilate.


Non è necessario eliminare il ramo git dopo aver terminato; è solo personalizzato. Inoltre -1 per interpretare erroneamente gli usi dell'indice - non lo usi per mettere in scena commit errati, lo usi per mettere in scena passaggi parziali di una serie più ampia di commit. Di solito questo accade durante un rebase quando si cancella la cronologia.
alternativa il

@mathepic - Se non elimini i nomi dei rami e trasferisci tutti i rami 'fix' locali su remoto, finirai con un numero enorme di riferimenti, proprio come si finisce con una pletora di vecchi rami in svn. In hgquesti rami i nomi sono sempre topologicamente locali, quindi li vedi solo se li cerchi.
Mark Booth,

@mathepic - Per quanto riguarda il tuo -1, penso che tu stia fraintendendo quello che sto dicendo. Non riesco a immaginare perché qualcuno commetta intenzionalmente un cattivo impegno, ma con Git è facile farlo per caso. Se si dimentica che il file cimplementa un'interfaccia modificata nel file ie si commette accidentalmente isenza, callora se qualcuno inserisce le modifiche prima che si sia in giro per eseguire cla compilazione, non funzionerà. Se invece usi il flusso di lavoro stash / compile / commit, questo errore semplicemente non si verificherà poiché la tua build verrà interrotta per prima. Ho provato a rendere più chiara la mia risposta.
Mark Booth,
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.