Git non è meglio di Subversion. Ma non è anche peggio. È diverso.
La differenza fondamentale è che è decentralizzato. Immagina di essere uno sviluppatore in viaggio, di sviluppare sul tuo laptop e di avere il controllo del codice sorgente in modo da poter tornare indietro di 3 ore.
Con Subversion hai un problema: il repository SVN potrebbe trovarsi in una posizione che non puoi raggiungere (nella tua azienda e al momento non hai internet), non puoi impegnarti. Se vuoi fare una copia del tuo codice, devi letteralmente copiarlo / incollarlo.
Con Git non hai questo problema. La tua copia locale è un repository e puoi impegnarti e ottenere tutti i vantaggi del controllo del codice sorgente. Quando riacquisti la connettività al repository principale, puoi impegnarti contro di essa.
All'inizio sembra buono, ma tieni a mente la maggiore complessità di questo approccio.
Git sembra essere la cosa "nuova, brillante, bella". Non è affatto male (c'è una ragione per cui Linus l'ha scritto per lo sviluppo del kernel Linux dopo tutto), ma sento che molte persone saltano sul treno "Distributed Source Control" solo perché è nuovo ed è scritto da Linus Torvalds, senza effettivamente sapendo perché / se è meglio.
Subversion ha problemi, ma anche Git, Mercurial, CVS, TFS o altro.
Modifica: Quindi questa risposta ha ormai un anno e genera ancora molti voti, quindi ho pensato di aggiungere qualche spiegazione in più. Nell'ultimo anno da quando ho scritto questo, Git ha guadagnato molto slancio e supporto, in particolare da quando siti come GitHub sono davvero decollati. Oggi sto usando sia Git che Subversion e mi piacerebbe condividere alcune intuizioni personali.
Prima di tutto, Git può essere davvero fonte di confusione all'inizio quando si lavora decentralizzato. Che cos'è un telecomando? e come impostare correttamente il repository iniziale? sono due domande che sorgono all'inizio, soprattutto rispetto al semplice "svnadmin create" di SVN, "git init" di Git può prendere i parametri --bare e --shared che sembra essere il modo "corretto" di impostare un sistema centralizzato repository. Ci sono ragioni per questo, ma aggiunge complessità. La documentazione del comando "checkout" è molto confusa per le persone che cambiano: il modo "corretto" sembra essere "git clone", mentre "git checkout" sembra cambiare i rami.
Git brilla davvero quando sei decentralizzato. Ho un server a casa e un laptop in viaggio e SVN semplicemente non funziona bene qui. Con SVN, non posso avere il controllo del codice sorgente locale se non sono connesso al repository (Sì, conosco SVK o i modi per copiare il repository). Con Git, questa è comunque la modalità predefinita. È comunque un comando extra (git commit esegue il commit a livello locale, mentre git push origin master spinge il ramo master sul telecomando chiamato "origin").
Come detto sopra: Git aggiunge complessità. Due modalità di creazione di repository, checkout vs. clone, commit vs. push ... Devi sapere quali comandi funzionano localmente e quali funzionano con "il server" (suppongo che alla maggior parte delle persone piaccia ancora un "master-repository" centrale ).
Inoltre, gli strumenti sono ancora insufficienti, almeno su Windows. Sì, c'è un componente aggiuntivo di Visual Studio, ma uso ancora git bash con msysgit.
SVN ha il vantaggio di essere MOLTO più semplice da imparare: c'è il tuo repository, tutte le modifiche verso di esso, se sai come creare, eseguire il commit e il checkout e sei pronto per andare e puoi raccogliere cose come ramificare, aggiornare ecc. Più tardi su.
Git ha il vantaggio di essere MOLTO più adatto se alcuni sviluppatori non sono sempre connessi al repository principale. Inoltre, è molto più veloce di SVN. E da quello che sento dire, ramificare e fondere il supporto è molto meglio (cosa prevedibile, poiché questi sono i motivi principali per cui è stato scritto).
Questo spiega anche perché guadagna così tanto ronzio su Internet, poiché Git è perfettamente adatto ai progetti Open Source: basta Fork, applicare le modifiche al proprio Fork e quindi chiedere al manutentore del progetto originale di apportare le modifiche. Con Git, questo funziona e basta. Davvero, provalo su Github, è magico.
Quello che vedo anche sono i bridge Git-SVN: il repository centrale è un repository Subversion, ma gli sviluppatori lavorano localmente con Git e il bridge invia le loro modifiche a SVN.
Ma anche con questa lunga aggiunta, resto ancora al mio messaggio principale: Git non è migliore o peggiore, è solo diverso. Se hai bisogno del "Controllo del codice sorgente offline" e della volontà di dedicare del tempo extra all'apprendimento, è fantastico. Ma se hai un controllo sorgente rigorosamente centralizzato e / o stai lottando per introdurre il controllo sorgente in primo luogo perché i tuoi colleghi non sono interessati, allora la semplicità e gli strumenti eccellenti (almeno su Windows) di SVN brillano.