Controllo della versione per lo sviluppo di giochi: problemi e soluzioni? [chiuso]


106

Esistono molti sistemi di controllo della versione , inclusi quelli open-source come Subversion , Git e Mercurial , oltre a quelli commerciali come Perforce .

In che misura supportano il processo di sviluppo del gioco? Quali sono i problemi che utilizzano VCS, per quanto riguarda i file non di testo (file binari), i grandi progetti, eccetera? Quali sono le soluzioni a questi problemi, se ce ne sono?

Per l'organizzazione delle risposte, proviamo in base al pacchetto. Aggiorna ogni pacchetto / risposta con i tuoi risultati.

Inoltre, ti preghiamo di elencare alcuni brevi dettagli nella tua risposta, se il tuo VCS è gratuito o commerciale, distribuito contro centralizzato, ecc.

Aggiornamento : ho trovato un bell'articolo che confronta due dei VCS di seguito - apparentemente, Git è MacGyver e Mercurial è Bond . Bene, sono contento che sia risolto ... E l'autore ha una bella citazione alla fine:

Va bene fare proselitismo a coloro che non sono ancora passati a un VCS distribuito, ma provare a convertire un utente Git in Mercurial (o viceversa) è uno spreco di tempo ed energia di tutti.

Soprattutto dal momento che il vero nemico di Git e Mercurial è Subversion . Dang, è un mondo di codice-mangia-codice là fuori nella terra FOSS ...


Nota: questo è destinato a sostituire la domanda gamedev.stackexchange.com/questions/245/… . Tra 72 ore cancellerò quella domanda - per ora la lascio in sospeso, per dare alle persone il tempo di copiare le loro risposte / commenti a questa domanda. :)
Ciclope,

Questo probabilmente finirà per essere una delle mie domande preferite, se le persone seguono le istruzioni di modifica. Ora sto lavorando a una soluzione specifica per Game Dev: D
Jesse Dorsey

@Noctrine, si doveva aggiungere il disclaimer se , non è vero? :) Di naturalmente gente seguirà le istruzioni ...
Ciclope

Non eliminare l'altra domanda. Se è davvero fuori tema (non credo lo sia) può essere chiuso e archiviato. Può anche essere chiuso come duplicato di questo.
Firas Assaad,

@Firas, è stato chiuso - e riaperto :) Indipendentemente da ciò, penso che questa formulazione sia migliore (e sì, è un wiki) - e se le persone copiano le loro risposte, questa dovrebbe coprire tutte le informazioni nell'altra domanda.
Ciclope,

Risposte:


71

Idiota

Recentemente sono stato sul carro di Git (ho usato SVN e Mercurial). Finora mi piace molto quello che ottengo con Git. È tutt'altro che complicato da configurare e altri strumenti di sviluppo stanno iniziando ad adottare il suo utilizzo.

È un sistema di controllo versione distribuito. Questo ci consente di avere la nostra area indipendente simile a un tronco. Posso lavorare nella mia area e invitarti a visualizzare i changeset molto facilmente. Posso eseguire il rollback nel mio spazio senza creare il repository centrale. Posso impegnare, ramificare e fare tutto ciò che puoi fare con SVN localmente. Mi piace molto avere questo controllo.

Con SVN, è necessario accedere al repository per eseguire il commit. Che cosa succede se sei in viaggio o in un bar senza internet? Non bene.

Certo, SVN è molto più semplice da imparare, ma penso che i vantaggi del controllo della fonte distribuita siano ampiamente superiori al fatto che ha una piccola curva di apprendimento.

Mi piace anche che sia più intelligente riguardo alla fusione.

Un importante svantaggio di GIT è che memorizza l'intera storia a livello locale. (Sì, puoi eseguire un intervento chirurgico per ridurlo, ma è il comportamento predefinito). Non è affatto un problema per i file di origine, ma se hai un progetto di grandi dimensioni con gigabyte di dati sugli asset, diventa rapidamente un problema. Nella mia attuale esperienza, consiglierei GIT solo per repository più piccoli o solo di origine.

Se sei ancora curioso di sapere GIT, controlla http://thkoch2001.github.io/whygitisbetter/ per alcune informazioni / metriche valide. Controlla anche vedi https://git.wiki.kernel.org/index.php/GitSvnComparsion


1
Adoro l'idea della gerarchia dei rami che consente al QA di testare le modifiche prima che arrivino alla linea principale, o di creare e convalidare facilmente le demo.
tenpn

@tenpn, è una caratteristica del VCS distribuito in generale o solo Git?
Ciclope,

1
Ho sentito che Git e Mercurial soffrono entrambi quando si inseriscono file di grandi dimensioni. Qualche verità su quella voce di persone con più esperienza di me?
drhayes,

6
Git è buono e tutto, ma quando si tratta di gestire grandi risorse grafiche o musicali, come più di 100 di MB, diventa notevolmente lento in commit e check-out. Al momento Mercurial, il contendente a Git, ha un'estensione "file di grandi dimensioni" che risolve questo problema specifico. Se hai un progetto di gioco che non ha molte risorse, puoi provare Git.
Spoike,

3
Perché non usare i sottomoduli di Git per gestire i file binari? In questo modo è possibile creare repository separati secondo necessità e quindi collegarli insieme utilizzando sottomoduli. Eventuali modifiche future nel repository principale non dovrebbero influire sui sottomoduli.
Alex Schearer,

62

mutevole

Caratteristiche principali:

  • VCS distribuito
  • Gratuito, open source
  • Gli script di plugin sono facili da scrivere --- possono essere scritti in Python o come script di shell
  • Ci sono molti script di plugin già disponibili gratuitamente
  • Molta documentazione disponibile, incluso questo libro (altamente raccomandato)

Per quanto riguarda l'uso di file non di testo, le ultime versioni di Mercurial (> = 2.0) forniscono l' estensione per file di grandi dimensioni per impostazione predefinita :

largefile risolve questo problema aggiungendo un livello client-server centralizzato sopra Mercurial: i file di grandi dimensioni vivono in un archivio centrale sulla rete da qualche parte e prendi solo quelli di cui hai bisogno quando ne hai bisogno.

Esistono altre estensioni che forniscono soluzioni simili come l' estensione bigfiles che ti consente di archiviare le tue risorse nello stesso repository Mercurial, ma recupera i file binari necessari solo quando ne hai bisogno.

Non sono a conoscenza di problemi riguardanti progetti di grandi dimensioni oltre a quelli relativi alla presenza di file binari di grandi dimensioni. Il progetto Python è un grande progetto e utilizza Mercurial .

Joel Spolsky ha scritto un mini tutorial sull'uso di Mercurial presso Subversion Re-education


4
Nota interessante sull'estensione di Bigfiles, che affronta uno dei problemi riportati nel thread originale, che VCS distribuito non si adattava bene alle produzioni di giochi che avevano un gran numero di risorse di file binari.
Ciclope,

1
+1 per Mercurial. È veloce, facile da usare e sorprendentemente potente. :) Lo sto usando per tutto: sviluppo web, sviluppo di giochi, progetti privati ​​individuali e progetti di gruppo. Grazie per aver introdotto l'estensione BigFiles!
jacmoe,

Per quanto riguarda i grandi progetti, TortoiseHg sembra andare molto più lentamente su un grande repository con 8 anni di revisioni rispetto a un piccolo repository con meno di 20 revisioni. Non so ancora se questo è qualcosa di specifico per Tortoise o Mercurial in generale.
Kylotan,

4
Non sembra esserci un'opzione paragonabile a svn:needs-lock, e dal momento che non c'è nemmeno modo di dire chi sta lavorando localmente su quali file , sei letteralmente tornato a far girare un gruppo intorno al team, letteralmente (non puoi modificare senza il ciotola sulla tua scrivania). Estensione BigFiles o no, questo VCS è inutile per i file binari senza una soluzione pratica a questo.
Sam Harwell,

3
Indipendentemente dal supporto di bigfile, se due persone modificano, per esempio, un file Maya contemporaneamente, uno farà il check-in e l'altro dovrà rifare il lavoro. Con Perforce, almeno, puoi sapere che qualcun altro sta modificando il file (e anche avere automaticamente un blocco su quel file).
dash-tom-bang,

39

necessariamente

Perforce (commerciale / a codice chiuso, centralizzato) è lo standard del settore per una serie di motivi.

  1. È un prodotto commerciale, il che significa che viene fornito con supporto commerciale. I progetti open source possono avere diritto a una licenza gratuita (meno il supporto tecnico).
  2. Supporta molto bene le aree di lavoro , il che consente layout di directory di risorse e risorse molto flessibili.
  3. Supporta molto bene le liste dei cambiamenti .
  4. Puoi vedere chi sta lavorando su cosa. I giochi hanno un numero anormalmente elevato di file binari (risorse) che cambiano rapidamente rispetto ad altri progetti di sviluppo. Il più delle volte non sono unificabili, quindi tenere traccia di chi ha cosa / dove / quando è fondamentale. I client Subversion e DSCC evitano intenzionalmente questa tecnica, ma è abbastanza vantaggioso in alcune applicazioni.
  5. Supporta gigantesche basi di codice / asset. Essa non memorizza i dati duplicati sulle macchine client, che è importante quando il sub-vista l'albero è un paio di dozzine di concerti.

Detto questo, è dolorosamente ovvio su base quasi quotidiana che Perforce non ritiene che la loro posizione nel settore sia minacciata. I loro strumenti visivi, tra cui P4V e P4SCC (si integrano con Visual Studio) sono lenti e buggy, con quest'ultimo noto per congelare Visual Studio per il puro divertimento di esso. AnkhSVN è molto più avanti di Perforce.

Commento di xan: Vale la pena notare, tuttavia, che il loro strumento di unione, P4Merge (usato per diffondere e fondere) è eccellente e di gran lunga superiore a artisti del calibro di Tortoise Merge. Sorprendentemente, questo componente è disponibile gratuitamente come parte del pacchetto P4 Visual Tools.

Commento di slicedlime: Un altro svantaggio di Perforce è che ramificarsi in esso tende ad essere un dolore enorme, specialmente se si hanno alberi di grandi dimensioni. Quasi tutti gli altri vcs sono più adatti alle ramificazioni e alle fusioni. Questo è di solito un piccolo prezzo da pagare per i vantaggi di cui sopra.

Commento di Roe: Perforce è estremamente loquace. Non c'è molto da fare senza il server coinvolto. In particolare, è necessario il server per poter aprire-per-modificare, il che significa che è necessario saltare alcuni cerchi se si intende interrompere la connessione al server.

Commento di jrista: Come utente quotidiano di Perforce da oltre due anni, con un esteso team di sviluppo e ingegneria di qualità di oltre 100 persone, ho acquisito familiarità con esso. Pur essendo un discreto sistema di controllo del codice sorgente, ha i suoi svantaggi che coloro che valutano i sistemi SCC dovrebbero essere a conoscenza di:

  • Come menzionato da altri, la ramificazione / integrazione è particolarmente ingombrante e difficile da fare. Hai una quantità empia di controllo, ma ha un costo di eccessiva complessità. Il rovescio della medaglia, lo strumento di unione visiva è unico nel suo genere e presenta una splendida vista di unione "basata" su tre file del tuo lavoro. Perforce fornisce alcune visualizzazioni grafiche dei percorsi di diramazione (chiamato grafico di revisione), tuttavia il modo in cui viene visualizzato spesso rende lo strumento piuttosto inutile. Se hai solo bisogno di vedere un piccolo intervallo di tempo per uno o pochissimi file, può essere utile ... qualcosa di più ed è quasi impossibile navigare nel Grafico delle Revisioni.
  • Perforce non è inoltre uno strumento molto efficiente, poiché quasi tutte le operazioni sui file richiedono la duplicazione di file e dati: diramazione, etichettatura, elenchi di modifiche, ecc. Nessun tag o ramificazione sparsa o leggera qui. Se non hai paura di usare un'enorme quantità di spazio su disco per tracciare le tue modifiche, probabilmente la soluzione sarà utile. In caso contrario, vorrei cercare un altro strumento.
  • Perforce utilizza le aree di lavoro, tuttavia a volte queste possono essere frustranti, poiché la cache forzata memorizza tutti gli stati nell'area di lavoro, anziché utilizzare i file effettivi sul disco per determinare un certo stato. Ciò comporta spesso la mancata sincronizzazione dei file perché l'area di lavoro afferma che sono aggiornati, quando, per qualsiasi motivo, i file fisici su disco NON sono effettivamente aggiornati.
  • Un ultimo fastidio, Perforce è piuttosto brutale sulla tua rete. È un programma estremamente loquace e consuma una notevole quantità di larghezza di banda. Qualsiasi perdita di connettività di rete e si corre il rischio elevato di non essere in grado di eseguire alcun lavoro con i file controllati dal codice sorgente fino al ripristino della connettività. Al momento, non ho scoperto un'attività che può essere eseguita off-line in Perforce.

2
Un altro vantaggio di Perforce è che è gratuito per i primi due utenti, il che è ottimo per i piccoli progetti di hobby, o due valutano la sua idoneità per un progetto più ampio.

Dalla mia esperienza il punto 5 della tua risposta è molto vero. È estremamente scalabile. Gli errori sono rari, il supporto è rapido. Non certo sul costo, Yacine osserva che è gratuito per i primi due utenti. Per studi più piccoli con giochi più piccoli varrebbe la pena valutare altre opzioni. L'integrazione con Visual Studio è un po 'fuori dagli schemi; ma siamo abbastanza fortunati da avere un appassionato completo di Perforce nel nostro studio che scrive da zero un eccellente fornitore di risorse per VS.
paulecoyote,

Perforce è fantastico, se te lo puoi permettere. Non ho usato tutti i sistemi di controllo delle versioni, ma in 10 anni di sviluppo di giochi commerciali e diversi sistemi di controllo delle versioni, è il migliore che ho usato con un certo margine. Gestisce file di dati di grandi dimensioni in modo rapido e affidabile e, se impostato correttamente, funziona bene in una configurazione multi-sito tramite connessioni Internet relativamente lente. L'integrazione con Visual Studio potrebbe non essere perfetta, ma è piuttosto solida.
bluescrn,

1
Se dovessi scegliere un VCS per lo sviluppo di giochi (su larga scala), sarebbe Perforce. Se potessi scegliere più elementi, aggiungerei un DVCS per le risorse di testo (codice, script e altri file di dati vari) ma conserverei Perforce per le risorse binarie.
dash-tom-bang,

2
Ho lavorato a un grande progetto di gioco che utilizzava Perforce ed era completamente sconcertato dal fatto che qualcuno lo pagasse. La necessità di essere sincronizzati con il server è odiosa, anche su una LAN. Comprendo la funzione "riconcilia il lavoro offline", ma in pratica il flusso di lavoro è così invadente che quando ci sono singhiozzi di rete non funziona. Se non usi un IDE che ha un plug-in P4 o vuoi solo modificare un file qua e là dalla riga di comando o da un altro strumento, devi tornare al client P4 e fare un po 'di contabilità. Nessun altro VCS pone così tanti ostacoli al lavoro.
Suboptimus,

27

Sovversione

  • Open-source, centralizzato

  • File Blender - Non sono del tutto sicuro se i file .blend sono binari (sembrano simili), ma non ho avuto problemi ad aggiungerli a Subversion. Dopo aver fatto alcuni esperimenti, l'aumento della dimensione del file per i file modificati appare nominale, quindi non si tratta semplicemente di copiare l'intero file.

  • Grandi progetti - Funziona, anche se può diventare eccentrico. È sicuramente in grado di gestire repository di almeno 5,5 GB (dimensione totale della directory repository sul server; principalmente risorse binarie).

  • Dati duplicati sul client: Subversion conserva una copia duplicata di ogni file nell'area di lavoro dell'utente come copia originale. Il vantaggio di questo è che puoi fare un diff o ripristinare senza tornare al server. Lo svantaggio è che i tuoi 10 gig di file di lavoro richiedono 20 gig di spazio su disco.

  • L'elenco ignore è una proprietà di una directory (semplice con una gui, fastidiosa sulla riga di comando).

  • Subversion consente il blocco di file / risorse, il che è molto utile se più artisti e designer lavorano sugli stessi file.

  • Gli esterni sono un ottimo modo per gestire il codice condiviso (ad es. Libreria o base) tra progetti.


Grandi progetti - KDE, GNOME.
Matias Valdenegro,

* FSFS può essere molto fragile per il ripristino, quindi è necessario prestare particolare attenzione ai backup. * Facile da capire, TortoiseSvn è un ottimo cliente. * I tracker di bug open source, i sistemi di integrazione continua, ecc. Spesso supportano Subversion "out the box". * Ci sono alcuni buoni libri disponibili sull'uso di Subversion.
paulecoyote,

1
@paulecoyote, questo è un post wiki, sentiti libero di modificarlo con nuove informazioni, non solo commenti.
Ciclope,

1
SVN è ottimo da usare con Tortoise SVN ( tortoisesvn.net ), un client che si integra perfettamente nel menu di scelta rapida e fornisce le guide per tutte le azioni. Indubbiamente, tartaruga non ha porte Linux / Mac OS (almeno per scrivere questo). Protip: se si lavora con più persone, aggiornare sempre (e unire / risolvere i conflitti) PRIMA del commit.
Exilyth,

7

AlienBrain

Da Avid :

Alienbrain è un sistema di gestione patrimoniale digitale per artisti nel settore dello spettacolo

  • Commerciale (più costoso di Perforce), centralizzato
  • Progettato per integrarsi con altri strumenti professionali di flusso di lavoro 2D e 3D come Photoshop, Maya, 3ds Max, Microsoft Visual Studio, ecc.

Non ho alcuna esperienza con AlienBrain, e solo sentito parlare da libro Gioco codifica completa da Mike McShaffry. Sembra pensarci bene, tuttavia:

Artisti e altri collaboratori utilizzeranno effettivamente questo prodotto, a differenza di altri progettati principalmente per integrarsi bene con Visual Studio e non con applicazioni creative come Photoshop e 3D Studio Max. Uno dei maggiori svantaggi di altri prodotti è il trattamento piuttosto ingenuo dei file non testuali. AlienBrain è stato scritto pensando a questi file.

Naturalmente lo descrive anche come:

Per quelli di voi con problemi di localizzazione degli asset davvero gravi e budget altrettanto seri ...


SÌ! Finalmente uno che lo ottiene: risorse e codice hanno bisogno di strumenti diversi! +1
jacmoe,

3
La mia esperienza con AlienBrain è che gli autori non ottengono lo sviluppo del gioco. Non è una solida soluzione di controllo del codice sorgente. Alcune funzioni sono utili per alcuni membri del team, ma alcune delle funzioni pubblicitarie più interessanti non sono implementate in modo tale da risultare utili (ad esempio l'interfaccia di gestione temporanea, in cui qualcuno può controllare le proprie risorse "per la revisione". Sfortunatamente non c'è modo di sapere cosa è da rivedere e cosa no, e quando lo sincronizzi lo ottieni comunque). Inoltre non memorizza nella cache nulla, quindi una sincronizzazione richiede il test di ogni singolo file. Questo è lento con molti concerti di attività. :)
dash-tom-bang

L'unica cosa utile su AlienBrain è la finestra di anteprima che funziona con i file Max. Tutto il resto è immondizia totale.
dieci

1
Non sono sicuro di quanto sia costruttivo dal momento che non è un'esperienza di prima mano, ma ho lavorato su un paio di progetti che avevano utilizzato AlienBrain prima di lavorare al progetto, e non lo stavo più usando, e nessuno aveva cose belle da dire esso. Il mio ricordo di leggere e catturare il passaparola è che è esploso sulla scena, sembrava davvero bello e alcune persone che se lo potevano permettere lo hanno provato e alla fine si sono resi conto che era un errore.
Suboptimus,

3

Team Foundation Server

da Microsoft

  • Commerciale
  • centralizzata
  • Si integra molto bene con Visual Studio
  • Buona integrazione di Windows Explorer per utenti non VS (ovvero artisti)
  • Supporta i changeset "Shelved", che è in qualche modo analogo a "stashing" in git, ma arriva al server; puoi anche rendere pubblici questi scaffali, per consentire ad altri utenti di integrarli per te.
  • Dal 2012 ha alcuni ottimi flussi di lavoro di revisione del codice integrati direttamente in Visual Studio
  • L'ultima versione dello strumento di unione è molto bella. L'unione automatica funziona abbastanza bene.
  • Supporta file di grandi dimensioni e bindary bene (ovviamente non puoi unirli)
  • Server di compilazione molto buono
  • Supporta check-in con gate, che consentono di valutare la qualità di uno scaffale (attraverso build automatizzate, unit test, analisi del codice) prima che venga eseguito il commit nel repository.
  • Ottimi strumenti di gestione del progetto (non strettamente funzionalità di controllo del codice sorgente, ma davvero utili), che offrono tracciabilità da requisiti di alto livello fino al codice.

Ho usato ampiamente TFS su progetti di simulatore MILSPEC, ed è abbastanza buono. Probabilmente non è il massimo se sei su un Mac, anche se al giorno d'oggi c'è un plug-in Eclipse. La versione ospitata sul cloud supporta i repository git per il back-end di controllo del codice sorgente.

È gratuito per un massimo di cinque utenti su Visual Studio Online (consente il codice sorgente chiuso; nessun limite di dimensione del repository), dove è ospitato nel cloud. Se vuoi ospitarlo localmente, può essere costoso.

Le cose che mi piacciono di più sono le funzionalità di gestione dell'ingegneria del software e il fatto che gestisce file di grandi dimensioni e file binari abbastanza felicemente.


1
Il nuovo Visual Studio Online è gratuito per un massimo di 5 utenti ed è ospitato nel cloud (con una buona copia di sicurezza, ecc.) Può fare TFS o Git con esso. Ottimo per lo sviluppo di giochi indie.
Robert Fraser,
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.