2010-07-06 11 views
41

Possibili duplicati:
For home projects, can Mercurial or Git (or other DVCS) provide more advantages over Subversion?
What are the relative strengths and weaknesses of Git, Mercurial, and Bazaar?Git vs Mercurial vs SVN

Quali sono alcune delle differenze tra questi il ​​sistema di controllo del codice sorgente? Qual è il migliore per un piccolo progetto di 2 persone?

+1

Vedere [Per i progetti domestici, Mercurial o Git (o altri DVCS) possono offrire più vantaggi rispetto a Subversion?] (Http://stackoverflow.com/questions/1218471/for-home-projects-can-mercurial-or- git-or-other-dvcs-provide-more-advantages-o) –

+0

Vedere http://stackoverflow.com/questions/161541/svn-vs-git/2549128#2549128 – VonC

+0

http://stackoverflow.com/questions/ 885213/in-short-what-are-the-vantaggi-of-git-and-mercurial-over-subversion http://stackoverflow.com/questions/871/why-is-git-better-than-subversion – joeynelson

risposta

46

SVN è diverso da Git e Mercurial, in quanto è un singolo repository a cui tutti gli utenti devono eseguire il pull e il commit.

Git e Mercurial hanno un modello distribuito. Ciò significa che esiste un repository su ogni computer e di solito c'è un repository "ufficiale" che le persone sceglieranno per eseguire il commit delle modifiche e per effettuare il pull da.

Git e Mercurial sono estremamente simili. Preferisco Mercurial perché l'ho trovato molto più facile da usare. Per una squadra di 2 persone consiglierei Mercurial, ma questa è solo la mia opinione. Se non hai familiarità con il controllo della versione, dovrai comunque spendere il tuo tempo per imparare a utilizzare una delle opzioni, ma Mercurial è sembrato il più facile per me.

Per avviare un repository Mercurial, tutto ciò che devi fare è aprire una shell e fare il cd nella directory in cui vuoi avere il controllo della versione, e digitare hg init. Questo crea il repository. Per aggiungere tutto nella cartella al repository, digitare hg add .. Qui ci sono alcuni altri vari comandi:

  • per confermare le modifiche locali: hg commit -m "Descriptions of changes"
  • Per tirare per la versione più recente dal server: hg pull
  • per spingere la modifiche locali: hg push
+7

Se questo non è già stato coperto in uno dei duplicati collegati (elencati nella domanda), è necessario pubblicare una risposta su uno di essi. –

+1

Ottima definizione. In realtà lavoro con Mercurial presso un'azienda e lavoro con SVN in un'altra azienda. Sto pensando di utilizzare Git per i miei progetti personali. Seguirò con maggiori dettagli una volta che ho una migliore comprensione di git. –

+0

Se devi scegliere tra mercurial e git. Vai con git. Non sto dicendo che è meglio. Ma è quello comunemente usato oggi. C'è un ecosistema molto più ampio che circonda git (Github, Stahs, Gitlab, supporto IDE, ecc.) Che mercuriale. Inoltre molti sviluppatori avranno git installato e sanno come usarlo. – Gellweiler

15

Per cominciare, c'è il linguaggio in cui sono scritte. Le mie esperienze con Git e Mercurial sono state molto simili, ma so che se voglio modificare Mercurial, posso farlo, perché è scritto in Python. Git è almeno un po 'in C, che non mi è familiare.

Git e Mercurial sono quello che si chiama distribuito. Ogni copia è creata uguale e possono spingere e tirare (usando quella terminologia) i cambiamenti l'uno dall'altro su una base ad-hoc. Subversion, d'altro canto, consiste in un singolo repository centrale, e ogni copia di lavoro è schiava di quel server centrale, spingendo e tirando (commettendo e aggiornando, in questo caso) le modifiche da esso e da solo.

Installazione Git o Mercurial per un paio di persone si compone di ottenere l'accesso SSH allo stesso server e l'installazione di un paio di pacchetti. Considerando che per SVN, per quanto ne so, è necessario configurare ed eseguire un'applicazione server effettiva in Apache, e quindi pasticciare con un certificato SSL e .htaccess, ecc. Per proteggerlo.

Per tutti i miei progetti personali, vado con Mercurial e Git. Se lavorassi con un team di grandi dimensioni, probabilmente andrei su Subversion perché hai l'autenticazione e l'hosting centralizzati. Ma per due persone, ne sceglierei uno distribuito, perché in questo caso non è necessario fare confusione con l'autenticazione centralizzata e l'hosting. :-)

+2

You può trattare i sistemi di controllo delle versioni distribuite come se fossero centralizzati, se ciò si adatta al flusso di lavoro di un grande team. –

+1

Vero. Penso che sia per questo che per i progetti moderni sembra che stiano sostituendo completamente SVN. Vedi: github. Ma penso che l'autenticazione/auditing sia più difficile da realizzare con un DVCS perché il nome utente è auto-alimentato e l'unico (facile) modo per farlo è quello di condividere un account SSH. Se ti fidi di tutti con quella chiave, va bene, ma SVN ti dirà con molta più certezza chi ha fatto cosa, e le persone possono avere l'accesso al commit senza la possibilità di sovrascrivere l'intero repository - se ho i privilegi per fare un Git o HG commit, ho i privilegi per cancellare tutto. – jacobbaer

+1

Git ora supporta commit firmati PGP che sono impossibili da falsificare, basta rifiutare commit non firmati se si è interessati al controllo. E l'autenticazione, stai parlando come se dovessi usare la stessa chiave SSH? È semplicemente stupido e totalmente insicuro. – kyrias

6

Git e Mercurial sono abbastanza simili (ma abbastanza diversi da meritare cautela).SVN d'altra parte è abbastanza diverso: i primi due sono VCS distribuiti, quindi non richiedono un server centrale, mentre SVN lo fa. In generale molti progetti si stanno spostando verso sistemi distribuiti.

Per il tuo piccolo progetto, probabilmente stai meglio con Git o Mercurial. Quello che scegli è essenzialmente una questione di gusti, anche se preferisco Git me stesso (e sono molto più familiare con esso). Non è necessario impostare un server: è possibile eseguire il push/pull delle modifiche tramite SSH o persino inviare le patch delle e-mail tra di loro (ciò può essere fatto direttamente dal VCS ma è una sorta di seccatura). Puoi configurare un server centrale in qualsiasi momento e tutte le modifiche saranno disponibili. Puoi usare ad es. GitHub o Gitorious per ospitare il tuo progetto (se vai con Git, non so su Mercurial).