Git pro Unreal Engine

Git pro Unreal Engine Tagy: Vývoj aplikací
| Publikováno dne

Git je nejpopulárnější systém pro kontrolu zdrojového kódu (source control system), respektive, správu jeho verzí (version control system, přeložitelný rovněž jako verzovací systém). Jinými slovy jde o nástroj, který drží soubory jednotlivých uložených verzí a umožňuje se k nim vracet i procházet změny. Představit si jej můžete rovněž jako jakýsi vývojový deník změn v projektu, který sdružuje nejen poznámky, ale současně se k nim i vážící soubory.

Struktura souborů v Unreal Engine

Unreal engine nepracuje s jedním souborem projektu, jako je tomu například v případě grafických editorů. Namísto toho pracuje s více vzájemně propojenými vývojovými soubory, které jsou zpravidla sdruženy “do jednoho” až v případě buildu konečné aplikace.

Pokud jde o samotné obsahové assety, Unreal pracuje se strukturou na úrovni Actorů (actor levels). To v praxi znamené, že jednotlivé objekty ve scéně (aktory) jsou ukládány do samostatných souborů. V případě větších celků, jakými jsou např. mapy, lze pro změnu využívat dělení do gridů prostřednictvím funkce “World Partition” (Tools → Convert Level…). Velmi zajímavou funkcí je přitom “Multi-user editing”, kdy více uživatelů provádí současně změny v jednom konkrétním souboru.

Co je však důležité, Unreal engine drží každý soubor pouze v jedné verzi, a to logicky té poslední. Defaultně se tedy netvoří žádné zálohy, a tedy ani neexistuje možnost návratu mimo historii uloženou v cache souborech projektu.

Přínos verzovacího systému při vývoji

Git umožňuje správu souborů, a to současně ve 2 směrech:

  • Záloha souborů včetně metadat - co bylo změněno, kdy a kým
  • Synchronizace souborů při práci v týmech

Jak Git funguje?

Verzovací systém git funguje lokálně - není tedy závislý na připojení k internetu. Z hlediska správy verzí, design je nastaven tak, že git pracuje v kontextu úplných verzí projektu. Uložení / založení nové verze projektu se označuje výrazem commit, a jde o uložení všech změn provedených od předchozího provedeného commitu. Součástí takového commitu je i poznámka k danému commitu a automatická metadata (kdo commit provedl, kdy, co bylo změněno).

Uložený commit lze následně exportovat na server, čímž dochází nejen k provedení zálohy na oddělené místo od lokální vývojové stanice, ale především možnost distribuce mezi více klientů - jinak řečeno, snadné synchronizaci mezi více počítači - např. při práci v týmu.

Git systémů pro správu zdrojových kódů funguje celá řada (Github, Microsoft Azure DevOps, Gitlab, Bitbucket…), nicméně principiálně fungují shodně, viz vysvětlení níže. Jen opět připomenu, že samotné verze jsou v principu provedené commity.

Princip fungování nástroje git

Na každé vývojové stanici (počítač A a B) existuje lokální kopie vyvíjeného projektu. Tato kopie je dostupná bez ohledu na přístup k internetu. Vedle toho existuje online úložiště (centrální server), obvykle ve formě cloud hostingu s Git klientem, na nějž mohou uživatelé provedené commity na lokální stanici uploadovat. Daný server poté veškeré commity drží a zpřístupňuje jak pro uživatele, který dané commity provedl, tak i všechny ostatní s přístupem k danému adresáři.

Kdykoli uživatel A odešle jakýkoli commit A na server, uživatel B je o provedených změnách informován a změněné soubory si může stáhnout, čímž tyto soubory ve své lokální verzi projektu aktualizuje aktuální.

Jestliže se stane, že více uživatelů provede nezávazně na sobě úpravu ve stejném zdrojovém kódu, v momentě odeslání commitu na server dojde ke zjištění konfliktu a jestliže nemá vzniknout fork (oddělená cesta vývoje), odesílající uživatel musí zohlednit při svém commitu změny provedené v souboru někým jiným od doby, kdy si jej naposledy stáhl na lokální stanici. Z toho důvodu je vždy vhodné před započetím vývoje zkontrolovat, zda soubory, s nimiž budete pracovat, jsou na vaší lokální stanici aktuální a současně o svých vývojových záměrech případně své spolupracovníky pracující na stejném projektu informovat. V případě souborů je možné využívat i tzv. File Locking.

Instalace Git klienta

Unreal Engine od verze 4.7 umožňuje používání nativního Git pluginu. Přesto, rychlejší možností z hlediska vývoje v Unreal Engine je stále vlastnoruční zpráva prostřednictvím odděleného Git klienta.

Git je open-source bezplatný software, jehož verze jsou dostupné na webu https://git-scm.com/. Konzolový klient naleznete poté pro svůj operační systém v sekci downloads. Při instalaci můžete použít výchozí nastavení. Po jejím dokončení budete mít k dispozici příkaz “git” v příkazové řádce). Jestliže příkazovou řádku používat nepotřebujete, vystačíte si i se samotným GIT GUI klientem, jejichž seznam naleznete zde.

To ovšem platí jen teoreticky, dokud nepotřebujete prostřednictvím gitu spravovat i velké soubory - používat large file storage (LFS). K tomu slouží rozšíření Git pro verzování velkých souborů, jež je dostupné na adrese https://git-lfs.com/ a při vlastní automatické instalací právě git příkazy používá.

V konečném důsledku je tedy pravděpodobné, že jestliže nejste komfortní s používáním konzoly, budete muset nainstalovat konzolový git klient, git gui klient i git-lfs klient.

Volba Git hostingu pro Unreal Engine

Výše v článku byl zmíněn seznam populární klientů jako Github, Microsoft Azure DevOps, Gitlab, nebo Bitbucket. Tím onen seznam pouze začíná, git řešení je velké množství.

Vlastností Unreal Engine projektů je velká velikost - chceme-li tedy git používat pro více než jen kód, při výběru musíme zohlednit cenu Large File Storage nabízeného konkrétním git poskytovatelem.

Bezkonkurenční nabídku ve formě bezplatného neomezeného GIT-LFS uložiště pro všechny DevOps (VSO Git) repozitáře zde již od roku 2015 nabízí Microsoft. Samotné služby v rámci DevOps na Microsoft Azure jsou přitom dle ceníku uživatelských licencí rovněž přátelské - v rámci základního plánu je 5 uživatelů zdarma, poté se za každého dalšího uživatele platí příznivých $6 měsíčně.

Správa Git repozitářů a uživatelů na Azure DevOps

Azure Dev Ops umožňuje v rámci 1 účtu hostovat neomezený počet repozitářů (= projektů). Přidání nového projektu je jednoduché - po přihlášení do DevOps účtu na adrese https://dev.azure.com/ se klikne na modré tlačítko “+ New Project” vpravo nahoře a vyplní základní údaje jako název projektu a jeho viditelnost (veřejný / privátní).

Další uživatele do projektu lze přizvat po rozkliknutí projektu modrým tlačítkem vpravo nahoře “Invite”, případně skrze “Organization settings” vlevo dole na úvodní stránce s výpisem projektů (organization settings → users - nastavení oprávnění).

Přístupové údaje k online git repozitáři, k němuž máte přístup, včetně postupu pro první push commitu, získáte standardně po otevření zvoleného projektu v sekci Repos->Files.

Inicializace git projektu na lokální stanici

  1. Uvnitř příkazové řádky (cmd) přejděte do složky Unreal Engine projektu (cd <cesta do složky>)
  2. V příkazové řádce zadejte příkaz git init
  3. V příkazové řádce zadejte příkaz git status

Výstupem příkazu git status by měly být nyní veškeré soubory vašeho Unreal Engine projektu. Součástí jsou však i build soubory konečných aplikací, soubory cache, saved, intermediate a binaries, bez kterých se obejdeme, jelikož si je Unreal kdykoliv automaticky vytvoří. Z hlediska efektivity využívání Gitu je tedy dobrou praxí tyto soubory z git operací vyloučit pomocí .gitignore souboru.

Vytvoření .gitignore souboru

.gitignore soubor je možné vytvořit v kořenové složce projektu klasicky stisknutím pravého tlačítka myší a zvolením možnosti “Nový → Textový dokument” se jménem “.gitignore”. Obsahem souboru je poté vymezení cest a samotných souborů, např:

Build/*
Binaries/*
Intermediate/*

Rychlejší cestou nicméně je si vyplněný .gitignore soubor stáhnout a případně upravit dle potřeb projektu. Pokud si nepřejete používat git-lms, respektive chcete využívat git pouze pro správu verzí kódu, může být vhodné do .gitignore souboru přidat řádek Content/*.

Pokud po vložení .gitignore souboru opětovně provedete výpis příkazem git status, odebrané složky a soubory by se ve výpisu již dále neměly zobrazovat.

Vytvoření .gitattributes souboru

Jak .gitignores souboury z git vylučuje, tak naopak, soubor .gitattributes soubory pro git-lms zařazuje. .gitattributes soubor lze vytvořit v kořenové složce projektu opět jako textový soubor s názvem “.gitattributes” a vyplnit jej identifikátory souborů, které chceme ukládat. Např:

*.umap
*.uasset
*.uproject

Jednodušší variantou je nicméně opět si vyplněný .gitattributes soubor stáhnout a případně poupravit vlastním potřebám konkrétního projektu.

Registraci .gitattributes souboru poté provedeme příkazem git add .gitattributes.

Provedení commitu

Příkazem git status zjistíme, které soubory byly od předchozího commitu modifikovány. V našem případě jde o první commit, takže červeně budou označeny všechny soubory.

Jednotlivé soubory lze do commitu přidávat příkazem git add <filename>, nicméně mnohem rychlejší je přidat do commitu veškeré změněné soubory naráz příkazem git add .. Po tomto příkazu, zopakujeme-li příkaz git status, přidané soubory budou již vyznačeny zeleně. K daným souborům nyní přidáme poznámku vážící se k danému commitu - např. popis provedených změn. To lze prostřednictvím příkazu git commit -m “zde napište zprávu”.

V tento moment je náš commit úspěšně proveden na naší lokální stanici. Nyní je čas jej odeslat na server.

Push commitu na server

Ještě před prvním commitem na server je nutné do gitu současného projektu nastavit git adresu vzdáleného serveru. Tu v případě Azure DevOps před prvním commitem naleznete v sekci Repos → Files vašeho projektu. Tu k lokálnímu git klientu přiřadíte příkazem git remote add origin <url>.

Následný push na server, bez ohledu, zda jde o první či xy-tý, se provede příkazem git push -u origin master.

Seznam provedených pushů lze získat příkazem git log, případně ve zjednodušeném jednořádkovém zobrazení příkazem git log --oneline.

Přehled užitečných konzolových příkazů pro git

  • git –version = zjištění aktuální verze Git
  • git config –help = stránka manuálu pro Git
  • git init = inicializace noového git projektu
  • git status = zobrazení stavu pracovního adresáře
  • git add <filename> / git add . = přidání konkrétního souboru / všech modifikovaných souborů do commitu
  • git commit -m “textová poznámka” = poznámka přiřazená ke commitu
  • git remote add origin <url> = přiřazení adresy vzdáleného serveru pro zasílání commitů na server
  • git push -u origin master = odeslání commitu na server
  • git log / git log --oneline = seznam provedených commitů

Jaké existují alternativy ke git?

Výše probíraný git je nejpopulárnějším systémem pro správu zdrojových kódů. Jde o bezplatný systém, open-source, s obřím ekosystémem v podobě komunity a poskytovatelů cloudových služeb. Pokud Vám však git z jakéhokoli důvodu nevyhovuje, je možné používat alternativní řešení pro správu kódu, jakými jsou například:

  • Perforce - většinou se používá při vývoji AAA her. Jde o zavedený systém fungující dobře pro rozsáhlé projekty.
  • Apache® Subversion® - Starý, ale solidní a jednoduchý systém správy zdrojových kódů.
  • Plastic scm - nejnovější systém. Od roku 2021 je ve vlastnictví herního enginu Unity.