Come usare Git per il controllo del codice Unity3D?

Quali sono le migliori pratiche per l’utilizzo del controllo del codice sorgente Git con Unity 3D, in particolare nel trattare la natura binaria dei progetti Unity 3D? Descrivi il stream di lavoro, quali percorsi dovrebbero essere inclusi in .gitignore, quali impostazioni devono essere impostate in Unity e / o nel progetto, e qualsiasi altra cosa speciale che dovrebbe essere annotata.

Nota: mi rendo conto che l’utilizzo del server di asset è consigliato da Unity, ma mi piacerebbe utilizzare Git per una serie di motivi. Per favore non ci sono risposte che affermano o sostengono che dovrei semplicemente usare il server delle risorse. Il server di asset non è davvero un’opzione per me.

Quello che segue è un estratto dal mio blog personale .

Usare Git con giochi 3D

Aggiornamento ottobre 2015: GitHub ha da allora rilasciato un plugin per Git chiamato Git LFS che tratta direttamente il problema seguente. Ora puoi creare facilmente ed efficientemente file binari di grandi dimensioni!

Git può funzionare perfettamente con giochi 3D pronti all’uso. Tuttavia, l’avvertenza principale qui è che i file multimediali di versioning di grandi dimensioni (> 5 MB) possono rappresentare un problema a lungo termine dato che la cronologia dei commit è a dir poco esagerata. Abbiamo risolto questo potenziale problema nei nostri progetti eseguendo il controllo della versione solo della risorsa binaria quando è considerata definitiva. I nostri artisti 3D utilizzano Dropbox per lavorare su risorse WIP , sia per la ragione sopra riportata sia perché è molto più veloce e semplice (non molti artisti vorranno triggersmente utilizzare Git!).

Git Workflow

Il tuo stream di lavoro Git è tutto ciò di cui hai bisogno per decidere tu stesso, date le tue esperienze di squadra e come lavori insieme. Però. Consiglio vivamente la metodologia Git Flow appropriatamente denominata come descritto dall’autore originale qui .

Non entrerò troppo in profondità qui su come funziona la metodologia come l’autore descrive perfettamente e in poche parole anche così è facile da superare. Sto usando da un po ‘di tempo con il mio team, ed è il miglior stream di lavoro che abbiamo provato finora.

Applicazione client Git GUI

Questa è davvero una preferenza personale in quanto vi sono alcune opzioni in termini di Git GUI o se utilizzare una GUI del tutto. Ma vorrei suggerire l’ applicazione SourceTree gratuita che si integra perfettamente con l’estensione Git Flow. Leggi il tutorial SourceTree qui sull’implementazione della metodologia Git Flow nella loro applicazione.

Unity3D Ignora le cartelle

Per un controllo della versione aggiornato Github ha mantenuto il file Unity.gitignore senza specifiche del sistema operativo.

# =============== # # Unity generated # # =============== # Temp/ Library/ # ===================================== # # Visual Studio / MonoDevelop generated # # ===================================== # ExportedObj/ obj/ *.svd *.userprefs /*.csproj *.pidb *.suo /*.sln *.user *.unityproj *.booproj # ============ # # OS generated # # ============ # .DS_Store .DS_Store? ._* .Spotlight-V100 .Trashes ehthumbs.db Thumbs.db 

Impostazioni Unity3D

Per le versioni di Unity 3D v4.3 e versioni successive:

  1. (Salta questo passaggio nella versione 4.5 e successive) Abilita l’opzione External in Unity → Preferences → Packages → Repository .
  2. Apri il menu Edit e seleziona Project Settings → Editor :
    1. Passa Version Control Mode a Visible Meta Files .
    2. Cambia la Asset Serialization Mode Force Text .
  3. Salva la scena e proietta dal menu File .

Vuoi migrare il repository esistente in LFS?

Controlla il mio post sul blog per i passaggi su come farlo qui .

Configurazione aggiuntiva

Uno dei pochi maggiori fastidi che si hanno nell’usare Git con i progetti di Unity3D è che a Git non interessano le directory e lasceranno felicemente le directory vuote dopo aver rimosso i file da esse. Unity3D creerà i file * .meta per queste directory e può causare un po ‘di battaglia tra i membri del team quando Git si impegna a continuare ad aggiungere e rimuovere questi meta file.

Aggiungi questo hook post-merge Git alla cartella /.git/hooks/ per repository con progetti Unity3D al loro interno. Dopo ogni Git pull / merge, verrà esaminato quali file sono stati rimossi, verificare se la directory in cui è presente è vuota e, in tal caso, eliminarla.

In Unity 4.3 dovevi anche abilitare l’opzione External dalle preferenze, ma da Unity 4.5 hanno abbandonato l’opzione per questo, quindi il processo di installazione completo sembra:

  1. Passa a Visible Meta Files in Editor → Project Settings → Editor → Version Control Mode
  2. Passa a Force Text in Editor → Project Settings → Editor → Asset Serialization Mode
  3. Salva scena e progetto dal menu File

Anche il nostro team sta usando un file .gitignore un po ‘più esteso:

 # =============== # # Unity generated # # =============== # Temp/ Library/ # ===================================== # # Visual Studio / MonoDevelop generated # # ===================================== # ExportedObj/ obj/ *.svd *.userprefs /*.csproj *.pidb *.suo /*.sln *.user *.unityproj *.booproj # ============ # # OS generated # # ============ # .DS_Store .DS_Store? ._* .Spotlight-V100 .Trashes ehthumbs.db Thumbs.db 

Nota che le sole cartelle che devi tenere sotto il controllo del codice sorgente sono Assets e ProjectSettings .

Ulteriori informazioni su come mantenere Unity Project sotto il controllo del codice sorgente si possono trovare in questo post .

Cos’è il GIT?

Git è un sistema di controllo delle versioni distribuito gratuito e open source (SCM) sviluppato da Linus Torvalds nel 2005 (fondatore di Linux OS). È stato creato per controllare tutto da piccoli a grandi progetti con velocità ed efficienza. Aziende leader come Google, Facebook, Microsoft utilizzano quotidianamente GIT.

Se vuoi saperne di più su GIT, consulta questo tutorial rapido ,

Prima di tutto assicurati di avere il tuo ambiente Git impostato. Devi configurare sia il tuo ambiente locale che un repository Git (preferisco Github.com).

Applicazione client GIT Mac / Windows

Per l’applicazione client GIT gui ti ho consigliato di andare su Github.com,

GitHub è il posto in cui condividere il codice con amici, colleghi di lavoro, compagni di class e completi estranei. Oltre cinque milioni di persone usano GitHub per build cose incredibili insieme.

Impostazioni Unity3d

Hai bisogno di fare queste impostazioni

Passa a Visible Meta Files in Modifica → Impostazioni progetto → Editor → Modalità controllo versione.

inserisci la descrizione dell'immagine qui

Abilita l’opzione Esterna in Unity → Preferenze → Pacchetti → Repository

inserisci la descrizione dell'immagine qui

Passa a Imponi testo in Modifica → Impostazioni progetto → Editor → Modalità di serializzazione risorse.

inserisci la descrizione dell'immagine qui

Fonte: utilizzo di Git con il controllo del codice sorgente di giochi 3D

Per aggiungere a tutto ciò che è stato dichiarato, è anche ideale usare git lfs con Unity. Sto usando questo da quando è uscito e non ha avuto problemi.

Dovrai aggiungere questo .gitattributes accanto al tuo file .gitignore

 *.cs diff=csharp text *.cginc text *.shader text *.mat merge=unityyamlmerge eol=lf *.anim merge=unityyamlmerge eol=lf *.unity merge=unityyamlmerge eol=lf *.prefab merge=unityyamlmerge eol=lf *.physicsMaterial2D merge=unityyamlmerge eol=lf *.physicsMaterial merge=unityyamlmerge eol=lf *.asset merge=unityyamlmerge eol=lf *.meta merge=unityyamlmerge eol=lf *.controller merge=unityyamlmerge eol=lf *.a filter=lfs diff=lfs merge=lfs -text *.mp3 filter=lfs diff=lfs merge=lfs -text *.wav filter=lfs diff=lfs merge=lfs -text *.aif filter=lfs diff=lfs merge=lfs -text *.ttf filter=lfs diff=lfs merge=lfs -text *.png filter=lfs diff=lfs merge=lfs -text *.jpg filter=lfs diff=lfs merge=lfs -text *.exr filter=lfs diff=lfs merge=lfs -text *.fbx filter=lfs diff=lfs merge=lfs -text *.FBX filter=lfs diff=lfs merge=lfs -text *.rns filter=lfs diff=lfs merge=lfs -text *.reason filter=lfs diff=lfs merge=lfs -text *.lxo filter=lfs diff=lfs merge=lfs -text 

Questa è la mia lista di file rolling. Se usi file binari aggiuntivi non elenchi, aggiungili.

Ho anche configurato i file per usare yamlmerge, avresti bisogno di configurarlo. Puoi leggerlo qui: http://docs.unity3d.com/Manual/SmartMerge.html

Ho pensato che avrei potuto pubblicare un più semplice .gitignore per chiunque fosse interessato:

 # Ignore Everything /* # Except for these: !/.gitignore !/Assets !/ProjectSettings 

Ora abbiamo una perfetta integrazione con l’estensione di Github a Unity … https://unity.github.com/

La nuova estensione GitHub per Unity porta il stream di lavoro GitHub e altro in Unity, fornendo supporto per file di grandi dimensioni con Git LFS e blocco dei file.

Al momento di scrivere il progetto è in alpha, ma è ancora utilizzabile per progetti personali.

Edit -> Project Settings -> Editor

Imposta il controllo della versione sui meta file. Imposta la serializzazione delle risorse per forzare il testo.

Penso che questo sia quello che vuoi.

Solo le cartelle Assets e ProjectSettings devono essere sottoposte al controllo della versione git.

Puoi fare un gitignore come questo.

 [Ll]ibrary/ [Tt]emp/ [Oo]bj/ # Autogenerated VS/MD solution and project files *.csproj *.unityproj *.sln *.suo *.userprefs # Mac .DS_Store *.swp *.swo Thumbs.db Thumbs.db.meta .vs/ 

Le cose principali da ricordare quando si usa git per il controllo della versione del codice sorgente dell’unità-3d:

(A) NON effettuare il check-in nella cartella Libreria . Ho fatto questo errore più volte in passato e ne ho sofferto! Cancella O sposta la cartella della libreria prima di aggiungere il tuo progetto / file in git.

(B) Usa “Visible Meta Files” – per le versioni più recenti di unità – 5.3.4 e sopra questo succede di default. Per alcune delle versioni precedenti è necessario modificare le impostazioni in: Modifica-> Impostazioni progetto-> Controllo versione

(C) Usa un file .gitignore per Unity – per assicurarti che la sanità sia mantenuta e che i file non vengano aggiunti inutilmente – se su android / tizen – aggiungi regole per escludere i file APK e TPK dall’aggiunta al repository. Google in giro per un file .gitignore per l’unità OPPURE utilizzare questo modello .gitignore per Unity fornito da GitHub: https://github.com/github/gitignore/blob/master/Unity.gitignore

(D) Assicurati che il file .gitignore sia aggiunto al repository come primo file aggiunto – perché in passato ho perso personalmente l’aggiunta del file .gitignore. Ho molti pensieri a posteriori sul motivo per cui ciò è accaduto, ma al giorno d’oggi copio e aggiungo il file .gitignore come primo passo della creazione del repository.

Quindi … per rendere un progetto Unity pronto per git, procedi come segue:

(1) Vai alla cartella del progetto

(2) Digitare git init.

(3) Copia il file .gitignore: Su MacOS: cp ~ / Downloads / .gitignore Su Windows: copia c: \ Users [nomeutente] \ Downloads.gitignore.

(4) git aggiungi .gitignore

(5) git add *

Spero che questo aiuti … tutto il meglio!

Puoi utilizzare Github per Unity , un’estensione Unity che porta il stream di lavoro git nell’interfaccia utente di Unity.

Github per Unity ha appena rilasciato la versione 1.0 dell’estensione.

Unity fornisce anche il proprio controllo della versione di origine. prima dell’unità5 era unityAsset Server ma ora è deprezzato. e lanciare un nuovo sistema di controllo SVN chiamato unity collaborate.but il problema principale con l’unità e qualsiasi SVN sta commettendo e fondendo scena. ma Non di svn ci dà modo di risolvere questo tipo di conflitti o fondere scene. quindi dipende da te quale SVN hai familiarità. Sto usando lo strumento SmartSVN su Mac. e tartaruga su Windows.

inserisci la descrizione dell'immagine qui

Preferisco piuttosto che tu usi BitBucket, dato che non è pubblico e c’è un tutorial ufficiale di Unity su Bitbucket.

https://unity3d.com/learn/tutorials/topics/cloud-build/creating-your-first-source-control-repository

spero che questo ti aiuti.

Semplicemente aggiungendo sul sottojet di Gitignore. Il modo consigliato ignora solo Library e Temp, se è la radice del tuo progetto git. se siete come me e qualche volta avete bisogno di un progetto di unità per essere parte del repository, non dell’intero repository, le stringhe corrette in gitignore potrebbero essere:

 **/[Tt]emp **/[Ll]ibrary **/[Bb]uild