Sto iniziando un nuovo progetto distribuito. Dovrei usare SVN o Git e perché?
Sto iniziando un nuovo progetto distribuito. Dovrei usare SVN o Git e perché?
Risposte:
SVN è un repository e molti clienti. Git è un repository con molti repository client, ciascuno con un utente. È decentralizzato a un punto in cui le persone possono monitorare le proprie modifiche localmente senza dover spingere le cose su un server esterno.
SVN è progettato per essere più centrale in cui Git è basato su ogni utente che ha il proprio repository Git e quei repository spingono le modifiche in una centrale. Per questo motivo, Git offre alle persone un migliore controllo della versione locale.
Nel frattempo hai la scelta tra TortoiseGit , GitExtensions (e se ospiti il tuo repository git "centrale" su github, il loro client - GitHub per Windows ).
Se stai cercando di uscire da SVN, potresti voler valutare Bazaar per un po '. È uno dei sistemi di controllo della versione di prossima generazione con questo elemento distribuito. Non dipende da POSIX come git, quindi ci sono build native di Windows e ha alcuni potenti marchi open source che lo supportano.
Ma potresti non aver ancora bisogno di questo tipo di funzionalità ancora. Dai un'occhiata alle caratteristiche, ai vantaggi e agli svantaggi dei VCS distribuiti . Se hai bisogno di più delle offerte SVN, prendine in considerazione una. In caso contrario, potresti voler rimanere con l'integrazione desktop SVN (attualmente) superiore.
Non ho mai capito questo concetto di "git non essere buono su Windows"; Sviluppo esclusivamente su Windows e non ho mai avuto problemi con Git.
Consiglio vivamente git over sovversion; è semplicemente molto più versatile e consente lo "sviluppo offline" in un modo in cui la sovversione non potrebbe mai davvero. È disponibile su quasi tutte le piattaforme immaginabili e ha più funzionalità di quelle che probabilmente non userete mai.
Ecco una copia di una risposta che ho fatto di alcune domande duplicate da allora cancellate su Git vs. SVN (settembre 2009).
Meglio? A parte il solito link WhyGitIsBetterThanX , sono diversi:
uno è un VCS centrale basato su una copia economica per filiali e tag l'altro (Git) è un VCS distribuito basato su un grafico di revisioni. Vedi anche Concetti chiave di VCS .
Quella prima parte ha generato alcuni commenti male informati fingendo che lo scopo fondamentale dei due programmi (SVN e Git) sia lo stesso, ma che siano stati implementati in modo abbastanza diverso.
Per chiarire la differenza fondamentale tra SVN e Git , vorrei riformulare:
SVN è la terza implementazione di un controllo di revisione : RCS, quindi CVS e infine SVN gestiscono le directory dei dati con versione. SVN offre funzionalità VCS (etichettatura e unione), ma il suo tag è solo una copia della directory (come un ramo, tranne per il fatto che non si "dovrebbe" toccare nulla in una directory di tag) e la sua unione è ancora complicata, attualmente basata su meta -dati aggiunti per ricordare ciò che è già stato unito.
Git è una gestione del contenuto dei file (uno strumento creato per unire i file), evoluto in un vero sistema di controllo della versione , basato su un DAG ( Directed Acyclic Graph ) di commit, in cui i rami fanno parte della storia dei dati (e non dei dati stessi ) e dove i tag sono veri metadati.
Dire che non sono "fondamentalmente" diversi perché puoi ottenere la stessa cosa, risolvere lo stesso problema, è ... semplicemente falso su così tanti livelli.
Ancora i commenti su quella vecchia risposta (cancellata) insistevano:
VonC: Stai confondendo la differenza fondamentale nell'implementazione (le differenze sono molto fondamentali, siamo entrambi chiaramente d'accordo su questo) con la differenza di scopo.
Sono entrambi strumenti usati per lo stesso scopo: ecco perché molti team che in precedenza hanno utilizzato SVN sono stati in grado di scaricarlo con successo a favore di Git.
Se non risolvessero lo stesso problema, questa sostituibilità non esisterebbe.
, a cui ho risposto:
"sostituibilità" ... termine interessante ( utilizzato nella programmazione informatica ).
Ovviamente, Git non è certo un sottotipo di SVN.
Puoi ottenere le stesse caratteristiche tecniche (tag, branch, merge) con entrambi, ma Git non ti ostacola e ti consente di concentrarti sul contenuto dei file , senza pensare allo strumento stesso.
Certamente non puoi (sempre) semplicemente sostituire SVN con Git "senza alterare nessuna delle proprietà desiderabili di quel programma (correttezza, compito svolto, ...)" (che è un riferimento alla suddetta definizione di sostituibilità ):
Ancora una volta, la loro natura è fondamentalmente diversa (il che porta quindi a una diversa implementazione ma non è questo il punto).
Uno vede il controllo di revisione come directory e file, l'altro vede solo il contenuto del file (al punto che le directory vuote non si registrano nemmeno in Git!).
L'obiettivo generale generale potrebbe essere lo stesso, ma non è possibile utilizzarli allo stesso modo, né è possibile risolvere la stessa classe di problemi (in ambito o complessità).
2 vantaggi chiave di SVN che vengono citati raramente:
Supporto di file di grandi dimensioni. Oltre al codice, utilizzo SVN per gestire la mia home directory. SVN è l'unico VCS (distribuito o meno) che non si strozza con i miei file TrueCrypt (per favore correggimi se c'è un altro VCS che gestisce efficacemente 500 MB + file). Questo perché i confronti diff sono trasmessi in streaming (questo è un punto molto essenziale). Rsync è inaccettabile perché non è bidirezionale.
Checkout / check-in repository parziale (sottodir). Mercurial e bzr non lo supportano e il supporto di git è limitato. Questo è negativo in un ambiente di squadra, ma ha un valore inestimabile se voglio controllare qualcosa su un altro computer dalla mia home directory.
Solo le mie esperienze.
Dopo aver fatto ulteriori ricerche e aver esaminato questo link: https://git.wiki.kernel.org/articles/g/i/t/GitSvnComparison_cb82.html
(Alcuni estratti di seguito):
Dopo aver letto tutto questo, sono convinto che Git sia la strada da percorrere (anche se esiste un po 'di curva di apprendimento). Ho usato Git e SVN anche su piattaforme Windows.
Mi piacerebbe sapere cosa hanno da dire gli altri dopo aver letto quanto sopra?
Vorrei impostare un repository Subversion. In questo modo, i singoli sviluppatori possono scegliere se utilizzare i client Subversion o Git (con git-svn
). L'utilizzo git-svn
non offre tutti i vantaggi di una soluzione Git completa, ma offre ai singoli sviluppatori un grande controllo sul proprio flusso di lavoro.
Credo che ci vorrà un tempo relativamente breve prima che Git funzioni altrettanto bene su Windows come su Unix e Mac OS X (da quando lo hai chiesto).
Subversion ha strumenti eccellenti per Windows, come TortoiseSVN per l'integrazione con Explorer e AnkhSVN per l'integrazione con Visual Studio.
La cosa divertente è: ospito progetti in Subversion Repos, ma accedo ad essi tramite il comando Git Clone.
Leggi Sviluppa con Git su un progetto codice Google
Sebbene Google Code parli in modo nativo di Subversion, puoi facilmente usare Git durante lo sviluppo. La ricerca di "git svn" suggerisce che questa pratica è diffusa e anche noi ti incoraggiamo a sperimentarla.
L'uso di Git su un repository Svn mi dà vantaggi:
backup/public
per gli altri a dare un'occhiataNon rispondo davvero alla tua domanda, ma se vuoi i vantaggi del Controllo di revisione distribuito - sembra come te - e stai usando Windows Penso che sarebbe meglio usare Mercurial piuttosto che Git come Mercurial ha un supporto Windows molto migliore. Anche Mercurial ha una porta per Mac.
Se il tuo team ha già familiarità con i software di controllo di versione e sorgente come cvs o svn, quindi, per un progetto semplice e di piccole dimensioni (come affermi che lo sia), ti consiglierei di attenersi a SVN. Mi sento davvero a mio agio con svn, ma per l'attuale progetto di e-commerce che sto facendo su Django, ho deciso di lavorare su git (sto usando git in modalità svn, cioè con un repository centralizzato su cui spingo e tiro da al fine di collaborare con almeno un altro sviluppatore). L'altro sviluppatore è a proprio agio con SVN e, sebbene le esperienze degli altri possano essere diverse, entrambi stiamo passando un brutto momento ad abbracciare git per questo piccolo progetto. (Siamo entrambi utenti Linux hardcore, se è importante).
Il tuo chilometraggio può variare, ovviamente.
Sicuramente svn
, dato che Windows è, nella migliore delle ipotesi, un cittadino di seconda classe nel mondo di git
(vedi http://en.wikipedia.org/wiki/Git_(software)#Portability per maggiori dettagli).
AGGIORNAMENTO: Ci scusiamo per il collegamento interrotto, ma ho smesso di provare a far funzionare SO con URI che contengono parentesi. [link corretto ora. -ed]
Il punto principale è che Git è un VCS distribuito e Subversion centralizzato. I VCS distribuiti sono un po 'più difficili da capire, ma presentano molti vantaggi. Se non hai bisogno di questi vantaggi, Subversion potrebbe essere la scelta migliore.
Un'altra domanda è il supporto degli strumenti. Quale VCS è meglio supportato dagli strumenti che prevedi di utilizzare?
EDIT: Tre anni fa ho risposto in questo modo:
E Git funziona su Windows al momento solo tramite Cygwin o MSYS . Fin dall'inizio Subversion ha supportato Windows. Poiché le soluzioni git per Windows potrebbero funzionare per te, potrebbero esserci problemi, poiché la maggior parte degli sviluppatori di Git lavora con Linux e non aveva la portabilità nella mente fin dall'inizio. Al momento preferirei Subversion per lo sviluppo in Windows. Tra qualche anno questo potrebbe essere irrilevante.
Ora il mondo è leggermente cambiato. Git ora ha una buona implementazione su Windows. Anche se ho testato senza problemi su Windows (poiché non uso più questo sistema), sono abbastanza fiducioso che tutti i principali VCS (SVN, Git, Mercurial, Bazaar) abbiano un'implementazione corretta di Windows ora. Questo vantaggio per SVN è sparito. Gli altri punti (centralizzato vs. distribuito e verifica dell'assistenza dello strumento) rimangono validi.
Opterei per SVN poiché è più ampiamente diffuso e meglio conosciuto.
Immagino, Git sarebbe meglio per l'utente Linux.
Git non è supportato nativamente in Windows, per ora. È ottimizzato per i sistemi Posix. Tuttavia, l'esecuzione di Cygwin o MinGW consente di eseguire correttamente Git.
Oggi preferisco Git a SVN, ma ci vuole un po 'per superare la soglia se vieni da CVS, terra SVN.
Probabilmente sceglierei Git perché sento che è molto più potente di SVN. Sono disponibili servizi di hosting di codice a basso costo che funzionano alla grande per me - non è necessario eseguire backup o interventi di manutenzione - GitHub è il candidato più ovvio.
Detto questo, non so nulla riguardo all'integrazione di Visual Studio e dei diversi sistemi SCM. Immagino che l'integrazione con SVN sia notevolmente migliore.
Ho usato SVN per molto tempo, ma ogni volta che ho usato Git, ho sentito che Git è molto potente, leggero e anche se un po 'di curva di apprendimento coinvolto, ma è meglio di SVN.
Quello che ho notato è che ogni progetto SVN, man mano che cresce, diventa un progetto di dimensioni molto grandi a meno che non venga esportato. Laddove, il progetto GIT (insieme ai dati Git) ha dimensioni molto ridotte.
In SVN, ho avuto a che fare con sviluppatori da principianti a esperti e i novizi e gli intermedi sembrano introdurre conflitti di file se copiano una cartella da un altro progetto SVN per riutilizzarla. Considerando che, penso in Git, basta copiare la cartella e funziona, perché Git non introduce le cartelle .git in tutte le sue sottocartelle (come SVN).
Dopo aver lavorato molto con SVN da molto tempo, sto finalmente pensando di spostare i miei sviluppatori e me su Git, poiché è facile collaborare e unire il lavoro, oltre a un grande vantaggio è che le modifiche di una copia locale possono essere impegnate tanto desiderato, e infine spinto alla filiale sul server in una volta, a differenza di SVN (dove di volta in volta dobbiamo eseguire il commit delle modifiche nel repository sul server).
Qualcuno che può aiutarmi a decidere se dovrei davvero andare con Git?
.svn
cartella in ogni sottodirectory. Che "corregge" l'errore di copia prima che accada.
Si riduce a questo:
Il tuo sviluppo sarà lineare? In tal caso, dovresti rimanere con Subversion.
Se, d'altra parte, il tuo sviluppo non sarà lineare, il che significa che dovrai creare ramificazioni per diverse modifiche e quindi ricollegarle alla linea di sviluppo principale (nota a Git come diramazione principale), Git farà MOLTO altro per te.
hai provato Bzr ?
È abbastanza buono, connesso (le persone che creano Ubuntu) ce l'hanno fatta perché non gli piaceva nient'altro sul mercato ...
Posso espandere la domanda e chiedere se Git funziona bene su MacOS?
Rispondi ai commenti: grazie per la notizia, non vedevo l'ora di provarlo. Lo installerò a casa sul mio Mac.
C'è un video interessante su YouTube su questo. È dello stesso Linus Torwalds: Goolge Tech Talk: Linus Torvalds on git
SVN sembra una buona scelta sotto Windows, come sottolineato da altre persone.
Se qualcuno del tuo sviluppatore desidera provare GIT, può sempre utilizzare GIT-SVN in cui il repository SVN viene ricreato in un repository GIT. Quindi dovrebbe essere in grado di lavorare localmente con GIT e quindi utilizzare SVN per pubblicare le sue modifiche nel repository principale.
Devi andare con un DVCS, è come un salto di qualità nella gestione delle fonti. Personalmente uso Monotone e il suo tempo di sviluppo accelerato non ha fine. Lo stiamo usando per Windows, Linux e Mac ed è stato molto stabile. Ho persino buildbot che esegue build notturne del progetto su ciascuna delle piattaforme.
DVCS durante la distribuzione di solito significa che creerai un server centrale solo per consentire alle persone di inviare e modificare le modifiche.