Cosa fa SVN meglio di Git? [chiuso]


293

Non c'è dubbio che la maggior parte dei dibattiti sugli strumenti del programmatore si concentri sulla scelta personale (da parte dell'utente) o sull'enfasi del design , cioè sull'ottimizzazione del design in base a casi d'uso particolari (dal costruttore dello strumento). Gli editor di testo sono probabilmente l'esempio più importante: un programmatore che lavora su Windows al lavoro e che codifica in Haskell su Mac a casa, apprezza l'integrazione multipiattaforma e del compilatore e sceglie quindi Emacs su TextMate , ecc.

È meno comune che una tecnologia appena introdotta sia davvero, dimostrabilmente superiore alle opzioni esistenti.

È questo il caso dei sistemi di controllo versione (VCS), in particolare VCS centralizzato ( CVS e SVN ) rispetto a VCS distribuito ( Git e Mercurial )?

Ho usato SVN per circa cinque anni e SVN è attualmente usato dove lavoro. Poco meno di tre anni fa sono passato a Git (e GitHub) per tutti i miei progetti personali.

Posso pensare a una serie di vantaggi di Git over Subversion (e che per la maggior parte in astratto ai vantaggi della distribuzione su VCS centralizzata), ma non riesco a pensare a un contro esempio - un compito (che è rilevante e si presenta in un solito programmatore flusso di lavoro) che Subversion fa meglio di Git.

L' unica conclusione che ho tratto da questo è che non ho dati - non che Git sia migliore, ecc.

La mia ipotesi è che tali contro-esempi esistano, quindi questa domanda.


3
@jokoon: efficiente in termini di cosa? Sicuramente non velocità poiché anche Ethernet veloce è lenta rispetto alle operazioni locali.
maaartinus,


4
Ho sempre pensato che Git fosse molto stimato. È una moda passeggera, e i programmatori non sono impermeabili alla moda passeggera, nonostante le molte opposizioni a questo pensiero. Come tutti gli altri in questo mondo, tutti vogliono il nuovo giocattolo luccicante (Git). Git può essere buono - o addirittura fantastico per alcune persone - ma non è mai stato meglio di SVN quando si pensa in modo obiettivo.
Comprato777

3
Ho pensato che SVN fosse ancora buono da usare, la curva di apprendimento è buona quindi GIT.
Cheung,

5
Questa domanda è stata recentemente sospesa in quanto principalmente basata sull'opinione pubblica. Quella classificazione è sbagliata; si noti che la domanda è stata aperta per molto tempo; che ci sono molte domande sulle virtù del DVCS e che la domanda non chiede se sia migliore (opinione), ma cosa fa meglio. Le differenze non sono opinioni ma se il prodotto complessivo è - è difficile (ma non il punto di questa domanda).
Eamon Nerbonne,

Risposte:


207

Subversion è un repository centrale

Mentre molte persone vorranno avere repository distribuiti per gli ovvi benefici della velocità e delle copie multiple, ci sono situazioni in cui un repository centrale è più desiderabile. Ad esempio, se hai un pezzo di codice critico a cui non vuoi che nessuno acceda, probabilmente non vorrai metterlo sotto Git. Molte aziende vogliono mantenere il loro codice centralizzato e (immagino) tutti i (seri) progetti governativi sono sotto deposito centrale.

La sovversione è saggezza convenzionale

Questo per dire che molte persone (in particolare manager e capi) hanno il solito modo di numerare le versioni e di vedere lo sviluppo come una "linea singola" nel tempo hardcoded nel loro cervello. Senza offesa, ma la liberalità di Git non è facile da ingoiare. Il primo capitolo di ogni libro Git ti dice di cancellare tutti gli ideali convenzionali dalla tua mente e ricominciare da capo.

Subversion lo fa in un modo e nient'altro

SVN è un sistema di controllo della versione. Ha un modo per fare il suo lavoro e tutti lo fanno allo stesso modo. Periodo. Ciò semplifica la transizione da / verso SVN da / verso altri VCS centralizzati. Git NON è nemmeno un VCS puro - è un file system, ha molte topologie su come impostare i repository in diverse situazioni - e non esiste uno standard. Ciò rende più difficile sceglierne uno.

Altri vantaggi sono:

  • SVN supporta directory vuote
  • SVN ha un supporto Windows migliore
  • SVN può estrarre / clonare un sottoalbero
  • SVN supporta il controllo di accesso esclusivo, svn lockutile per i file difficili da unire
  • SVN supporta file binari e file di grandi dimensioni più facilmente (e non richiede la copia di versioni precedenti ovunque).
  • L'aggiunta di un commit comporta un numero considerevolmente minore di passaggi poiché non vi è alcun pull / push e le modifiche locali vengono sempre implicitamente riproposte svn update.

55
"Subversion lo fa in un modo" - lo pensavo anch'io, fino a quando non ho iniziato il mio attuale lavoro. Nel mio lavoro attuale, il mio capo, che afferma di non avere problemi di fiducia, ha configurato il server per richiedere il blocco. Non si verifica alcuna fusione nel nostro sistema. I file sono bloccati nel repository e nessun altro può scriverli senza il blocco. Il controllo dall'alto verso il basso, per coloro le cui costituzioni lo richiedono, è sicuramente qualcosa che svn fa meglio di git.
Dan Ray,

14
Un vantaggio del repository centrale è la facilità di backup. Se tutto il codice archiviato si trova in un posto e quel posto ha un backup fuori sede, non si perde tutto se l'ufficio si esaurisce. Con un DVCS, a meno che non si eseguano backup off-site delle macchine dello sviluppatore, si perde tutto ciò che non è stato inviato al server di cui è stato eseguito il backup off-site.
Paul Tomblin,

94
Perché Git non può essere usato in modo centralizzato? Devi solo avere un repository centrale e i tuoi sviluppatori possono clonare, estrarre e spingere come se effettuassero il checkout, l'aggiornamento e il commit.
David Thornley,

29
@PaulTomblin - A seconda del flusso di lavoro, Git può fornire backup migliori . Ad esempio, utilizziamo repository github privati ​​e spingo spesso il mio codice verso l'alto per visualizzare i rami. Se i miei colleghi lo fanno git fetch origin, ognuno di loro ha un backup del mio codice, insieme a qualunque backup Github stesso fornisca. (Potiamo regolarmente le filiali unite, sia localmente che su Github.)
Nathan Long,

52
Sembrerebbe implicare che il centro sia più sicuro per le grandi aziende o il lavoro governativo. Questo semplicemente non è vero. Se hai una copia del codice sul tuo computer, hai una copia del codice. Non importa se proviene da un server centrale o da un file system centrale che contiene un repository DVCS.
John Fisher,

131

Un vantaggio di Subversion su Git può essere che Subversion consente di estrarre solo sotto-alberi. Con Git l'intero repository è un'unità, puoi ottenere solo tutto o niente. Con il codice modulare, questo può essere abbastanza carino rispetto ai sottomoduli Git. (Anche se i sottomoduli Git hanno il loro posto, ovviamente.)

E un piccolo piccolo vantaggio: Subversion può tracciare directory vuote. Git tiene traccia dei contenuti dei file, quindi una directory senza file non verrà visualizzata.


11
Lavorare con alberi secondari è IMHO l'unica cosa che SVN ha su GIT. A proposito, le directory vuote sono carine, ma non sono nemmeno necessarie (e possono essere aggirate). Se i sottomoduli git e i sottotree git fossero meno confusi, non ci sarebbe nulla che impedisca a molte persone di migrare verso GIT. Gli altri vantaggi citati da alcune persone si riducono alla mentalità (degli sviluppatori). Ad esempio, se hai bisogno dall'alto verso il basso, va bene. Tuttavia non avrei alcun lavoro per te.
Fino al

3
È divertente come questi siano gli unici tipi di cose che possono essere discusse a favore di SVN (e di altri controlli centralizzati della versione)
dukeofgaming

1
Perché è divertente? - I sistemi più recenti imparano dai sistemi più vecchi. RCS ha anche un vantaggio su git: i file della cronologia possono essere facilmente modificati a mano e puoi avere rami per file. Ma l'espulsione implica che le funzionalità vengano perse ...
johannes

3
Ho sentito parlare di una società di giochi che utilizza SVN su GIT proprio per questo motivo - quando parli di un repository di dimensioni di molti GB, diventa improvvisamente importante!
James,

18
A partire dalla versione 1.8.0 di git, ora puoi usare il git subtreecomando per ottenere esattamente questo. L'ultimo vantaggio di sovversione morde la polvere :) Dettagli qui: github.com/gitster/git/blob/… Nota: anche se questo è un collegamento a un progetto github, git-subtree fa ora parte della distribuzione core di git.
Carl,

51

Mi vengono in mente tre. Innanzitutto, è un po 'più facile fare grok, specialmente per i non sviluppatori. Concettualmente è molto più semplice delle opzioni DCVS . Il secondo è la maturità, in particolare TortoiseSVN su Windows. TortoiseHg sta recuperando terreno però. In terzo luogo, la natura della bestia - solo l'immagine di un filesystem in cui è possibile controllare le cose da qualsiasi livello dell'albero - può rivelarsi molto utile in alcuni scenari, come il controllo delle versioni di una varietà di file di configurazione ampiamente diversi tra dozzine di server senza dozzine di repository.

Questo non vuol dire che non stiamo spostando tutto lo sviluppo su Mercurial.


25
Essere più facili da grok è un vantaggio importante, dal momento che ne rende più probabile l'uso. SVN è sicuramente molto meglio di nessun controllo di versione, e se qualcuno è testardo nei confronti dei vecchi modi, forse SVN è la scelta migliore per loro.
jhocking

12
@jhocking: non amo SVN, ma se qualcuno mi dice "non mi piacciono queste nuove DVCS cose, così io resterò con CVS", allora io sicuramente lo consiglio: è la strada facile da almeno parzialmente sano VCS ;-)
Joachim Sauer

4
@jhocking I nuovi modi non sono sempre i migliori per ogni circostanza. Mi viene in mente la vecchia storia della NASA che spende milioni di dollari per sviluppare una penna che può scrivere in 0g. I cosmonauti invece sono fatti con le matite. A volte i vecchi modi sono migliori, ORA SCENDI IL MIO PRATO!
maple_shaft

25
@maple_shaft, e talvolta non lo sono. snopes.com/business/genius/spacepen.asp
Peter Taylor

3
Facilmente grokked è altamente soggettivo e si basa in gran parte su come si tenta di adattare le nuove conoscenze a ciò che già si può sapere. Fa anche molta differenza quale sia la tua fonte di apprendimento. Se stai seguendo le pagine man, buona fortuna. Se ti viene insegnato da un bravo insegnante che già lo grugnisce, ce l'hai fatta. Ho scoperto che Git ha avuto un senso straordinario dopo aver visto molti buoni video su YouTube. Se ottieni la tua comprensione da qualcuno che l'ha già distillata fino al semplice nucleo, allora tutto è più facile da capire.
WarrenT

32
  • I repository SVN sono più gestibili dal punto di vista di un manager e di un amministratore ( ACL + metodi di autenticazione + hotcopy + mirror + dump)
  • I gancio SVN * sono più facili da implementare e supportare
  • svn:external ha più potenza e flessibilità rispetto ai sottomoduli
  • Gli alberi dei repository basati su filesystem sono più facili da usare rispetto ai repository monolitici con separazione solo logica
  • SVN ha strumenti client più diversi
  • SVN ha front-end web utilizzabili di terze parti, molto meglio di Git
  • SVN non ti spezza il cervello

23
Non ti spezza il cervello? Vuoi insegnarmi come unire facilmente i rami con i conflitti in SVN?
WarrenT

4
Strumenti / front-end "migliori", questo è un obiettivo mobile. Gli strumenti migliorano su entrambi i lati. Nessuno di noi sa quali strumenti saranno disponibili tra qualche anno. Tale valutazione 10 mesi fa potrebbe facilmente cambiare nel tempo, e potrebbe essere ormai viziata. Preferirei vedere risposte sostanziali.
WarrenT

6
Conflitti sugli alberi? Dai un'occhiata. Sì o no a tutte le opzioni? No. Svn è progettato per infuriare. Pulisci comando copia funzionante? No. Il ripristino non è in grado di pulire i file senza versione.
Warren P,

1
L'eliminazione di tutto e il check out ripuliranno i file non controllati.
jgmjgm,

Adoro la tua ultima idea, Git mi ha spezzato il cervello: '(
Luca

24

Ho scritto questo come un commento sulla risposta di qualcun altro, ma credo che meriti di essere una risposta in sé e per sé.

La configurazione accuratamente scelta della mia azienda per SVN richiede il blocco a livello di file per modificare il contenuto e mai e poi mai utilizza l'unione. Di conseguenza, più sviluppatori si contendono i blocchi, e può essere un grosso collo di bottiglia, e non c'è mai alcuna possibilità di un conflitto di unione.

SVN fa sicuramente il controllo manageriale top-down meglio di Git. Nella mia migrazione di skunkworks su Git (chiedendo perdono piuttosto che permesso) ho terrorizzato il mio manager molte volte con l'idea che non ci sono server centrali di controllo master controllati da software a cui siamo tutti schiavi.


La centralità è una questione di mito, non di fatto. Nessuno può impedirmi di cambiare nulla. Con un CVC possono impedirmi di cambiare centralmente qualcosa. Stessa cosa in un dvcs. La parola commit in cvcs comprende commit e push.
Warren P

@JonathanHenson: questa non è sicuramente l'unica ragione per cui Torvalds odia SVN. SVN può essere centralizzato e può essere un CVS migliore ma questo non lo rende un buon software. Torvalds odia CVS / SVN non perché sono centralizzati ma perché ritiene che siano pateticamente cattivi software. Se ha ragione o no dipende da te decidere ma visto l'immenso successo sia di Linux (e Android) - in esecuzione su miliardi di dispositivi - sia di Git - che sta praticamente prendendo d'assalto il mondo--, io ' d pensarci due volte prima di non essere d'accordo con lui. La lezione che Torvalds ha tenuto a Google su Git anni fa è sorprendente.
Cedric Martin,

lol. Il tuo manager ha ragione ad essere terrorizzato perché non esiste un sistema di backup adeguato. Il solo dire "ma il suo DVCS in modo che qualcuno ne abbia una copia" non vola - lo so, quando ho visto git usato nel mio ultimo posto, letteralmente non avevano alcuna copia di alcuni repository. Intendiamoci, il blocco può essere buono per alcune situazioni e git fallisce a questo proposito - a meno che tu non abbia uno strumento di unione magica per immagini o altri file binari. git funziona davvero solo per i file di testo.
gbjbaanb,

22

Le mie ragioni:

  • maturità - sia il server che gli strumenti (ad esempio TortoiseSVN)
  • semplicità: meno passaggi, un commit è un commit. DVCS come Git e Mercurial comportano il commit, quindi spingono.
  • gestione binaria - SVN gestisce gli eseguibili binari e le immagini meglio di Git / Hg. Particolarmente utile con i progetti .NET poiché mi piace controllare gli strumenti relativi alla build nel controllo del codice sorgente.
  • numerazione - SVN ha uno schema di numerazione commit leggibile, usando solo cifre - più facile da tenere traccia dei numeri di revisione. Git e Hg lo fanno in modo abbastanza diverso.

1
"commit schema di numerazione" è possibile solo se si dispone di trunk canonici. Altrimenti quale ottiene la numerazione principale?

1
+1 il numbring in svn. Questo numero è unico. ci sono strumenti per usare questo numero come parte del numero-versione app xx.yy.zz.12882 dove 12882 è il numero-versione svn. Se c'è un problema di produzione puoi chiedere a vor il numero di versione e hai l'esatta svn-revisione su cui è stato costruito il software
k3b

22

Apprezzo che tu stia cercando buone informazioni, ma questo tipo di domanda invita semplicemente: "Penso che Git sia così tanto vincente e svn teh suxorz!" risposte.

Ho provato e trovato personalmente Git un po 'troppo per la mia piccola squadra. Sembra che sarebbe fantastico per una grande squadra distribuita o un gruppo di squadre che sono geograficamente disperse. Capisco molto i vantaggi di Git, ma secondo me il controllo del codice sorgente non mi tiene sveglio la notte.

Sono un cacciatore di cervi e quando io e i miei amici usciamo siamo armati fino ai denti, irti di munizioni e equipaggiamento ad alta tecnologia. Mi faccio vedere con un solo fucile, sette proiettili e un coltello da caccia. Se ho bisogno di più di sette round, sto facendo qualcosa di sbagliato, e lo faccio bene come chiunque altro.

Il punto che sto cercando di sottolineare è che se sei un piccolo team che lavora su un progetto medio-piccolo e hai già familiarità con SVN, utilizzalo. È sicuramente meglio di CVS o (shudder) SourceSafe , e non mi ci vogliono più di cinque minuti per impostare un repository. Git a volte può essere eccessivo.


3
Veramente? Quindi suggerirei di dare un'occhiata al fossile .
Spencer Rathbun,

7
non suoniamo l'allarme alla minima possibilità di polemiche. Gli argomenti importanti sono spesso i più controversi e quelli che più probabilmente invocano opinioni fortemente condivise. Quindi "questo tipo di domanda" è importante e la possibilità di una risposta fuori limite non è plausibile non pubblicarla. Presumo che gli utenti di questo sito siano adulti. Inoltre, il modo in cui il mio Q è stato formulato, se non neutrale, è quindi deferente per la gente di sovversione: le risposte reattive al mio Q dovranno recitare i vantaggi della sovversione rispetto a git, non viceversa.
Doug

@SpencerRathbun, grazie! Dovrò dare un'occhiata a quello. Non è così tanto che amo svn in quanto ho un disgusto per Git.
maple_shaft

10
@Spencer - Al contrario, come utente di entrambi gite hg, suggerirei mercuriale per chiunque pensi che gitsia troppo. TortoiseHG sarebbe molto familiare a chiunque fosse abituato a TortoiseSVN (condivide persino gli stessi overlay Explorer su Windows). È sicuramente molto più semplice di VSS e sarei sorpreso se ci volessero più di pochi secondi per impostare un repository hg, eseguire il commit dello stato iniziale e clonarlo su un'unità condivisa.
Mark Booth,

@MarkBooth Come affermato nella domanda originale, penso che sia una questione di desideri e bisogni. Nel mio attuale posto di lavoro, non ci sono stati pronti contro termine prima del mio arrivo. Avevo bisogno di qualcosa che avesse tutti o quasi tutti gli strumenti di progetto che volevo riuniti, che fosse facile da usare, che contenesse tutto al posto dei delta e che funzionasse distribuito per team di 1 o 2 persone su più macchine.
Spencer Rathbun,

20

Questo è tutto relativo, e come ha detto maple_shaft, se uno funziona per te, non cambiare!

Ma se vuoi davvero qualcosa , direi che forse è meglio per designer, programmatori web e simili - gestisce un po 'meglio immagini e file binari .


2
In che modo SVN li gestisce meglio? Git considera ogni file un BLOB.
WarrenT

4
@WarrenT a causa dei flussi di lavoro, con git stai ramificando e fondendo molto (o perché preoccuparti di usarlo) e non puoi unire realisticamente i binari. Quindi, spesso metti la proprietà "necessario blocco" sui file binari in SVN.
gbjbaanb,

1
Alcuni binari possono (teoricamente) essere uniti, ad esempio un documento ODT.
Donal Fellows

18

Usabilità. In realtà non è merito di Subversion ma piuttosto TortoiseSVN . TortoiseGit esiste, ma ha ancora molta strada da fare per abbinare TortoiseSVN.

Se chiedessi cosa fa Git meglio di SVN, risponderei a GitHub . È divertente come gli strumenti di terze parti facciano una differenza così grande.


1
Assembla (per qualsiasi SCM supportato - SVN nella lista) è meglio di github, penso
Lazy Badger

ci sono anche smartgit, GitXL, ecc. ora, programmi che rendono l'uso di git molto più semplice
wirrbel,

@LazyBadger, non ne ho mai sentito parlare.
Pacerier,

16

Quando non hai bisogno di diramare e unire , SVN (con TortoiseSVN su Windows) è molto facile da capire e usare. Git è troppo complesso per i casi semplici, in quanto cerca di semplificare la ramificazione / fusione.

(Molti piccoli progetti non devono mai ramificarsi se gestiti bene. Git è indirizzato a casi complessi; pertanto la maggior parte della documentazione di Git presuppone che sia necessario eseguire operazioni complesse come la diramazione e l'unione.)


8
L'uso di gitdiramazione e fusione non sono operazioni complesse. Uso persino i rami in un progetto individuale, anche quando non ci sono requisiti per più versioni. Mantenere il lavoro non è possibile continuare in un momento, ramificarsi quando si scopre che provare un'altra soluzione potrebbe essere molto meglio ... Tuttavia, sono d'accordo che gitè un po 'più difficile da imparare.
maaartinus,

Ogni volta che è necessario eseguire correzioni di bug nelle versioni precedenti, è necessario ramificare e unire.

1
Perché la gente non considera l'idea che mercurial sia più facile di svn o git?
Warren P,

Penso che parte di ciò sia che, fino a poco tempo fa, SVN non ha supportato la ramificazione e la fusione senza un costo molto elevato, ha permesso ai programmatori di resistere maggiormente ai manager quando volevano continuare a cambiare ciò su cui qualcuno sta lavorando. Uno strumento deve funzionare all'interno delle politiche di un'azienda e aiuta anche a modellare le politiche di un'azienda.
Ian,

14

Bene, mio ​​nonno poteva usare SVN sul suo computer Windows XP, ma avrebbe avuto problemi con Git. Forse questo è più un risultato di TortoiseSVN su TortoiseGit , ma penso che sia piuttosto legato al fatto, che Git è intrinsecamente più potente e quindi più complesso, e sarebbe inutile ridurlo allo stesso livello.

Ora non importa davvero per mio nonno, perché non ha programmato fino a tardi. Tuttavia, una volta ero in una squadra, dove i nostri artisti grafici stavano usando anche il nostro controllo del codice sorgente.

E quelle sono persone che si aspettano semplicemente che i loro strumenti funzionino (anche io, ma ho una possibilità realistica di farli funzionare in caso di fallimento) ed essere intuitivi. A parte il fatto che sarebbe stato piuttosto uno sforzo per farli andare d'accordo con un DVCS , c'era poco da guadagnare. E con solo due programmatori nel team, era logico che ci attenessimo anche a SVN.


git è l'approccio più "filosofico" al controllo delle versioni. inizi a pensare alla semantica di commit, filiali, ecc. Quindi le persone che vogliono usare un VCS come "backup" e strumento di distribuzione hanno un momento più difficile, ma git non è molto più difficile
wirrbel

11

Al lavoro non sono riuscito a passare gli sviluppatori da SVN a nessun DVCS per due motivi:

  • Checkout parziali (come solo tre cartelle da profondità diverse nella struttura del progetto)
  • Blocco dei file (report in formato binario)

8
  • Senso di sicurezza quando si esegue un 'svn commit'. Dato che i commit vanno sul server, non posso fare nulla che possa cancellare i miei cambiamenti dopo che sono stati eseguiti. A dire il vero, gli commit sono locali, quindi fino a quando spingo, un rand 'rm -rf' ed è tutto finito.
  • Gli commit sono autenticati. Di default in Git posso dire che mi sto impegnando come chiunque.
  • Meno comandi da imparare per l'uso quotidiano. 'svn checkout', 'svn up' e 'svn commit' ti porteranno abbastanza lontano.
  • I checkout condivisi funzionano molto meglio. Quando vai a impegnarti, ti chiede il tuo nome utente / password, non devi ricordarti di passare determinati argomenti della riga di comando. A volte al lavoro abbiamo una macchina condivisa con una verifica svn condivisa di alcuni progetti. Qualcuno potrebbe dire "Bob, puoi vedere questo su questa macchina" e lui può, e può eseguire il commit delle sue modifiche come suo utente senza problemi.
  • Layout del repository. Puoi avere un progetto ombrello e sottoprogetti e scegliere cosa controllare quando.
  • I numeri di revisione stanno incrementando numeri interi.
  • Progettato per il flusso di lavoro del repository centrale.

+1 per il problema di autenticazione. I commit di Git devono essere firmati e le firme devono essere controllate, il che è difficile.
Christian,

6

Altre persone hanno pubblicato delle risposte piuttosto valide, ma per quanto riguarda le autorizzazioni? Usando Subversion su SSH, puoi creare un account separato sul tuo server per SVN. A diversi sviluppatori può essere concesso un accesso diverso a diverse parti del repository. GIT può farlo? Immagino che ci sia gitolite, ma per me non sembra flessibile o robusto, né conosco nessuno che lo stia effettivamente usando.


2
Altri lo hanno colpito citando il "controllo manageriale dall'alto verso il basso". Questo è un elemento chiave per il mio ambiente: abbiamo alcune aree dei nostri repository che devono essere bloccate per essere di sola lettura o addirittura non leggere per alcuni gruppi di utenti. Dobbiamo anche avere un'unica posizione in cui possiamo puntare e dire "questa è la copia principale autorevole, se la tua copia non corrisponde a ciò che è qui, non è ufficiale."
alroc,

1
l'archivio benedetto del responsabile del progetto e dei luogotenenti sta dando il controllo su chi può impegnarsi. Il repository Git pubblicato sul server abilitato per http-auth (utilizzando gli stessi moduli apache svn) esegue l'autenticazione e dice chi può clonare / verificare cosa. Certo, non è così granulare come possono essere le autorizzazioni svn per directory, ma a me sembra più una micro gestione che un'esigenza reale.
Hubert Kario,

@HubertKario - Questo solleva la domanda: "I tuoi migliori programmatori dovrebbero passare il tempo a controllare il codice di altre persone?" In realtà, sono così interessato alla risposta a questa domanda, che l'ho pubblicato qui: programmers.stackexchange.com/questions/181817/…
GlenPeterson

5

Velocità. A volte occorrono 10 o 15 minuti per clonare un repository git di grandi dimensioni, mentre un repository di sovversione di dimensioni simili richiede un paio di minuti per il check-out.


6
Ma il checkout / clonazione è un'operazione rara. Nella maggior parte degli scenari, git è più veloce della sovversione.
RDS

5
git clone --depth=1è tuo amico se non ti interessa la storia
Hubert Kario

4

Pubblico questo come risposta piuttosto che come commento.

Devo ammettere che i DVCS sono abbastanza in voga in questo momento, ma proverò a spiegarne il perché.

I DVCS sono migliori perché, proprio come molte persone hanno detto, "questo è il modo in cui avremmo dovuto lavorare dall'inizio". È vero, puoi fare con un DVCS quello che facevi con SVN, quindi in un modo che rende SVN obsoleto.

Tuttavia, non tutti i progetti software sono validi quanto si ottiene:

  • I progetti a lungo termine hanno beneficiato molto del DVCS, poiché utilizzano meno costi generali, consentono una gestione molto migliore (branching ecc.) Ed è notevolmente supportato da host come google code e github.

  • Quei progetti non sono i soli, ci sono altri tipi di progetti che vengono sviluppati in aziende senza alcuna assistenza dal mondo esterno o da Internet: tutto è fatto internamente e spesso a breve termine. Un buon esempio: un videogioco. Il codice si evolve rapidamente.

Per quest'ultimo caso, gli sviluppatori non hanno davvero bisogno di diramazioni o funzionalità sofisticate che DVCS può offrire, vogliono solo condividere codice sorgente e risorse. È improbabile che il codice che realizzano venga riutilizzato, poiché esiste una scadenza. Si basano su SVN piuttosto che su un DVCS per diversi motivi:

  • Gli sviluppatori hanno macchine che appartengono alla società e questo potrebbe cambiare rapidamente. La configurazione di un repository è una perdita di tempo.
  • Se quei ragazzi non hanno la propria macchina, hanno meno probabilità di lavorare sullo stesso codice sorgente / parte del progetto. Più uno per i dati centralizzati.
  • velocità di rete e grandi quantità di denaro consentono l'uso di un server centralizzato che gestisce tutto ciò che è SVN, è una cattiva pratica ma vengono effettuati backup ecc.
  • SVN è solo più semplice da usare, anche se è nel modo sbagliato: sincronizzare i file su peer senza ridondanza non è un problema semplice e "farlo nel modo giusto" non può farlo in tempo se si vuole sempre che sia perfetto.

Pensa alla macchina dell'industria dei giochi e al modo in cui SVN risparmia tempo; la gente comunica molto di più su questi progetti perché i giochi riguardano la programmazione ripetitiva e il codice adattivo: non c'è nulla di difficile da codificare, ma deve essere fatto nel modo giusto, al più presto. I programmatori vengono assunti, codificano la loro parte, la compilano, la provano un po ', si impegnano, finiscono, i tester di gioco si occuperanno del resto.

I DVCS sono realizzati per Internet e per progetti molto complessi. Le SVN sono destinate a progetti di team ristretti, a breve termine. Non hai bisogno di imparare molto da SVN, è quasi un FTP con una differenza stupida.


Puoi spiegare l'esempio dell'industria dei giochi?
johnny,

3

Subversion e Git incoraggiano entrambi approcci particolari (e molto diversi) allo sviluppo e alla collaborazione. Alcune organizzazioni trarranno il massimo da Git e altre trarranno il massimo da Subversion, a seconda della loro organizzazione e cultura.

Git e Mercurial sono entrambi eccellenti per team distribuiti e liberamente organizzati di programmatori professionisti altamente competenti. Entrambi questi popolari strumenti DVCS incoraggiano piccoli repository, con il riutilizzo tra gli sviluppatori tramite librerie pubblicate con interfacce (relativamente) stabili.

Subversion, d'altra parte, incoraggia una struttura di gestione più centralizzata e strettamente accoppiata, con una maggiore comunicazione tra gli sviluppatori e un maggior grado di controllo organizzativo sulle attività di sviluppo quotidiane. All'interno di questi team organizzati in modo più compatto, il riutilizzo tra sviluppatori tende a avvenire tramite librerie non pubblicate con interfacce (relativamente) instabili. TortoiseSVN consente inoltre a Subversion di supportare team multidisciplinari con membri che non sono programmatori professionisti (ad esempio ingegneri di sistema, ingegneri di algoritmi o altri specialisti dell'area).

Se il tuo team è distribuito, con membri che lavorano da casa o da molti siti internazionali diversi, o se preferiscono lavorare da soli e in silenzio, con poca comunicazione faccia a faccia, allora un DVCS come Git o Mercurial sarà un buon adattamento culturale.

Se, d'altra parte, il tuo team si trova in un unico sito, con un approccio "team" attivo allo sviluppo e molte comunicazioni faccia a faccia, con un "ronzio" nell'aria, SVN potrebbe essere un migliore adattamento culturale, in particolare se si hanno molte squadre interdisciplinari.

Certo, è possibile configurare Git e Hg (potenti e flessibili come sono) per fare praticamente tutto quello che vuoi, ma è sicuramente più lavoro e sono sicuramente più difficili da usare, in particolare per quei membri del team che non sarebbe naturalmente incline a utilizzare qualsiasi forma di controllo di versione di sorta.

Infine, trovo anche che la condivisione delle funzionalità utilizzando lo sviluppo di librerie "a caldo" sotto Svn (con CI e un approccio test-driven) consente un ritmo di sviluppo coordinato che è difficile da raggiungere con un team più distribuito e debolmente accoppiato.



1

Ci sono due principali tendenze nel controllo delle versioni in questo momento; Distribuzione e integrazione .

Git è eccezionale nel decentramento.

SVN ha molti strumenti integrati che si integrano con esso. È comune configurare il server SVN in modo che quando si effettua il check-in in una correzione, si menziona il numero di bug nel commento del check-in e lo imposta automaticamente su uno stato "in testing" e avvisa il tester assegnato che è necessario guardarlo. Quindi è possibile taggare una versione e ottenere un elenco di tutti i bug corretti in questa versione.

Gli strumenti che fanno questo con SVN sono maturi e usati ogni giorno.


-1

In Subversion, è possibile modificare i messaggi di registro (chiamati anche "messaggi di commit") dopo che il commit è stato eseguito e inviato. Per la maggior parte degli usi pratici, ciò è impossibile in base alla progettazione in sistemi decentralizzati, incluso git. Ovviamente, in git puoi fare "git commit --amend", ma questo non ti aiuta dopo che il tuo commit è stato spinto altrove. In SVN, quando modifichi il messaggio di registro, lo stai facendo sul repository centrale che tutti condividono, così tutti riceveranno la modifica e senza cambiare l'identificatore della revisione.

La modifica dei messaggi di registro dopo il fatto è spesso molto utile. Oltre a correggere un errore o un'omissione in un messaggio di registro, ti consente di fare cose come aggiornare un messaggio di registro per fare riferimento a un commit futuro (come una revisione che corregge un bug o completa il lavoro introdotto nella revisione corrente) .

A proposito, non c'è pericolo di perdere informazioni. Gli hook pre-revprop-change e post-revprop-change possono salvare una cronologia dei vecchi messaggi se sei veramente preoccupato, o inviare e-mail con il messaggio di registro diff (questo è più comune, in realtà), in modo che ci sia un pista di controllo.


1
anche questo è semplice da fare in git; ad esempio, git --amend; un altro modo per farlo è tramite git reset --soft HEAD ^, che torna indietro ma non altera l'indice e quindi è possibile modificare / riscrivere il messaggio di commit.
Doug

Ciao Doug. Sì, puoi farlo per il tuo repository locale, ma sto parlando di una volta che hai spinto il cambiamento altrove - "git commit --amend" non ti aiuta molto allora. In SVN, è possibile modificare il messaggio di registro sul server centrale, proprio perché esiste un concetto di server centrale. Questo è ciò che intendevo per "impossibile in base alla progettazione nei sistemi decentralizzati". Modificherò la mia risposta per renderlo più chiaro.
Karl Fogel,

1
Adoro come "si possa armeggiare con la storia" è presumibilmente una caratteristica . Lo considererei un bug se non fosse intenzionale.
cao
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.