Git för spelutveckling
Massivt roligt Git för spelutveckling Git för spelutveckling 14 mars 2012 Jag har under årens lopp använt flera olika versionshanteringssystem för film- och spelproduktion: CVS, Perforce och till och med några interna verktyg. De har alltid framstått som klumpiga men nödvändiga onda ting – ovärderliga för att hålla koll på arbetet i stora projekt, men också en ständig källa till förvirring, flaskhalsar och stelbent produktion.
Git dök först upp på min radar för ungefär sex månader sedan. Det såg otroligt kraftfullt och flexibelt ut. Utvecklarna på Massively Fun använde redan Git för kodutveckling när jag gick med i teamet. Jag var nyfiken på att se om vi kunde få det att fungera även för konstproduktion.
Detta inlägg berättar historien om vad som hände. Bakgrund: Vad är Git? Git är ett distribuerat versionshanteringssystem. De flesta inom spelutvecklingen känner redan till minst ett annat versionshanteringssystem, som Subversion eller Perforce.
Precis som dessa andra system låter Git oss hålla koll på de många olika versionerna av alla filer som ingår i ett projekt. Men Subversion och Perforce är centraliserade system – alla filer checkas in eller ut från ett arkiv som finns på en central server. Git är annorlunda.
Det är inte beroende av en central server. Varje användare får en fullvärdig kopia av hela arkivet, med all dess historik och revisioner. Denna design har ett antal viktiga konsekvenser, varav de flesta är positiva.
Men det som får Git att sticka ut mest i mina ögon är hur det gör branch- och merge-operationer nästan triviala. Du kan skapa en branch för att arbeta med någon experimentell idé, en annan för att fixa ett orelaterat problem och ytterligare en för en ny funktion. Du kan snabbt växla mellan dessa olika brancher och slå samman dem efter behov. Det är en otroligt användbar funktion.
Relaterat: — Färdiggjord konst, verktyg och mallar som faller direkt in i ditt Unity-projekt.
Hinder Trots sina många styrkor har färdigpaketerad Git två uppenbara brister för konstproduktion: Det är inte konstnärsvänligt. Gits standardgränssnitt är kommandoraden.
Det finns många kommandon och alternativ att lära sig, tillsammans med underliggande koncept som skiljer sig tillräckligt mycket från andra versionshanteringssystem för att skapa förvirring. Dokumentationen är omfattande men ofta svår att förstå. Allt detta resulterar i ett paket som inte är särskilt tillgängligt och något skrämmande. Det är inte byggt för att hantera de stora binära filer som konstnärer skapar.
Eftersom varje lokalt arkiv innehåller all historik och alla revisioner kan mycket snabbt föränderlig konst äta upp mycket diskutrymme på kort tid. Vi kom fram till lösningar på båda dessa problem. Gränssnittet spelar roll Det finns flera bra grafiska gränssnitt för Git.
Vårt val: — On-demand-kurser som täcker Unity, Unreal, C++, C# och shader-programmering.
Konstnärer behöver fortfarande förstå grundläggande Git-koncept, men en väl designad front-end gör det betydligt lättare att komma igång och använda systemet. Vi fann att Atlassians SourceTree fungerade utmärkt i vår Mac-baserade miljö: det är kraftfullt, intuitivt och gratis (för närvarande) – en viktig faktor för en knaprig startup. Teamet bakom SourceTree svarade också prompt (< 12 timmar) på våra supportfrågor via Twitter.
Ett smidigt Git-tillägg Git-media adresserar Gits brister när det gäller stora binära filer. Det är ett Git-tillägg som låter dig lagra filer utanför Git. Git håller fortfarande koll på filversionerna; det lagrar bara filinnehållet någonstans utanför arkivet.
Vi planerade att lagra våra stora binära filer i Amazons S3-moln. Inte så fort Att använda SourceTree tillsammans med Git-media innebär dock en fallgrop: överföring av filer mellan våra arkiv och Amazon S3 kräver att vi kör ett skal-kommando; dvs. $ git media sync En arbetsflöde som tvingar konstnärer att lämna den relativa tryggheten i ett grafiskt program för att skriva skal-kommandon är inte konstnärsvänligt. SourceTree ger dig visserligen möjlighet att köra detta kommando som en anpassad åtgärd, men det räckte inte.
Konstnärerna skulle ändå behöva komma ihåg att göra det vid lämpliga tillfällen. Förr eller senare skulle de glömma, och någon skulle slösa värdefull tid på att ta reda på vad som gick fel och åtgärda det.
Hur kunde vi få SourceTree och git-media att samarbeta smidigt? Git Wrap Vi skrev ett generiskt wrapper-skript som valfritt kör vissa andra kommandon före och/eller efter själva Git-kommandot. Vi ställde in det för att automatiskt anropa ‘git media sync’ före eller efter kommandon som interagerar med ett fjärrarkiv, beroende på vad som passade. Vi konfigurerade SourceTree för att anropa wrappern istället för den medföljande Git-installationen.
Källkoden för wrappern finns tillgänglig här på Github. Äventyret fortsätter Jag skulle vilja berätta att det var slutet på historien, att SourceTree och git-media fungerade sömlöst tillsammans och att vi alla levde lyckliga i alla sina dagar. De fungerade faktiskt, upp till en viss punkt. Tyvärr räckte det inte.
SourceTree gör normalt sett ett bra jobb med att förhandsvisa bildfiler. Detta är avgörande för konstnärer när de commitar eller slår samman ändringar i sådana filer. Men användningen av git-media förstörde SourceTrees förmåga att förhandsvisa dessa filer eftersom det innebar att vi inte längre lagrade bilderna i Git; vi lagrade endast versionsinformation om bilderna.
Vi kunde inte hitta någon acceptabel lösning på detta; det var en dealbreaker. Vid tiden för detta skrivande gör vi ett nytt försök med Gits submodule-funktion.
Att lagra våra konsttillgångar i en submodule är ett annat sätt att minimera storleken på huvudprojektets arkiv. SourceTree förstår och stöder submodules ganska väl, och dess förmåga att förhandsvisa bilder förblir intakt. Submodules har visserligen vissa egenheter, men ingenting som ser ut att störa konstnärernas arbetsflöde nämnvärt. Håll utkik här för uppdateringar; vi återkommer med besked om hur det går. blog comments powered by Disqus
Bygg HTML5-spel i din webbläsare
Webbläsarbaserad HTML5-motor utan kod som exporterar till webb, mobil och dator