Come usare Git per il controllo del codice sorgente di Unity3D?


499

Quali sono le migliori pratiche per l'utilizzo del controllo del codice sorgente Git con Unity 3D, in particolare per quanto riguarda la natura binaria dei progetti Unity 3D? Descrivi il flusso di lavoro, quali percorsi verrebbero inclusi in .gitignore, quali impostazioni dovrebbero essere impostate in Unity e / o nel progetto e qualsiasi altra cosa speciale da notare.

Nota: mi rendo conto che l'utilizzo di Asset Server è il metodo consigliato da Unity, ma vorrei usare Git per una serie di motivi. Per favore, nessuna risposta affermi o sostenga che dovrei semplicemente usare Asset Server. L'Asset Server non è davvero un'opzione per me.


3
"usa solo svn" indipendentemente dagli argomenti inutili di git V svn, git non è adatto a file binari di grandi dimensioni. i progetti di unità sono film (e vari enormi file binari - trame ecc.), con una manciata di righe di codice. useresti git per archiviare la tua collezione di film? svn è almeno ragionevole.
Fattie,

1
La soluzione più semplice è semplicemente escludere tutte le cartelle binarie con gitignore e usare git solo per i tuoi file di codice attuali e forse per i tuoi file di risorse. Non è necessario includere tutti i file binari poiché ogni membro del team può compilarli da soli?
Kokodoko,

@Kokodoko Gli artisti non possono compilare i propri eseguibili.
Crashworks,

Anche se fosse vero, possono ancora spingere nuovi asset di immagini per git ... in modo che gli sviluppatori possano compilare con la nuova grafica ...
Kokodoko,

@Kokodoko Ciò significa che un artista dovrebbe aspettare che uno sviluppatore veda l'impegno ed esegua una build per vedere le loro modifiche nel gioco. Questo è un tempo di iterazione molto lungo.
Crashworks,

Risposte:


522

Quello che segue è un estratto dal mio blog personale .

Utilizzo di Git con giochi 3D

Aggiornamento ottobre 2015: Da allora GitHub ha rilasciato un plugin per Git chiamato Git LFS che affronta direttamente il problema seguente. Ora puoi eseguire in modo semplice ed efficiente la versione di file binari di grandi dimensioni!

Git può funzionare benissimo con giochi 3D pronti all'uso. Tuttavia, il principale avvertimento qui è che la versione di file multimediali di grandi dimensioni (> 5 MB) può essere un problema a lungo termine poiché la cronologia del commit si gonfia. Abbiamo risolto questo potenziale problema nei nostri progetti eseguendo la versione dell'asset binario solo quando è considerato definitivo. I nostri artisti 3D usano Dropbox per lavorare su risorse WIP, sia per il motivo sopra che perché è molto più veloce e più semplice (non molti artisti vorranno attivamente usare Git!).

Git Workflow

Il tuo flusso di lavoro Git è qualcosa che devi decidere da solo, date le tue esperienze di squadra e il modo in cui lavori insieme. Però. Consiglio vivamente la metodologia Git Flow opportunamente denominata come descritta dall'autore originale qui .

Non approfondirò troppo il modo in cui la metodologia funziona come l'autore la descrive perfettamente e in poche parole, quindi è facile da capire. Ho usato con il mio team per un po 'di tempo ed è il miglior flusso di lavoro che abbiamo provato finora.

Applicazione client Git GUI

Questa è davvero una preferenza personale qui in quanto ci sono alcune opzioni in termini di Git GUI o se usare affatto una GUI. Ma vorrei suggerire l' applicazione gratuita SourceTree in quanto si inserisce perfettamente con l'estensione Git Flow. Leggi il tutorial di SourceTree qui sull'implementazione della metodologia Git Flow nella loro applicazione.

Unity3D Ignora le cartelle

Per un controllo 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 successive:

  1. (Salta questo passaggio dalla v4.5 in poi) Abilita l' Externalopzione in Unity → Preferences → Packages → Repository.
  2. Apri il Editmenu e seleziona Project Settings → Editor:
    1. Passa Version Control Modea Visible Meta Files.
    2. Passa Asset Serialization Modea Force Text.
  3. Salvare la scena e il progetto dal Filemenu.

Vuoi migrare il tuo repository esistente in LFS?

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

Configurazione aggiuntiva

Uno dei pochi fastidi che uno ha nell'uso di Git con i progetti Unity3D è che a Git non interessano le directory e lasceranno volentieri le directory vuote dopo aver rimosso i file da loro. Unity3D creerà file * .meta per queste directory e può causare un po 'di battaglia tra i membri del team quando Git si impegna ad aggiungere e rimuovere questi meta file.

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


2
Citare il flusso di lavoro di git è bello, ma forse dovrei chiarire nella mia domanda che sto chiedendo dei flussi di lavoro particolarmente specifici per l'unità 3D. Come forse saprai, i progetti di unità si basano fortemente su file binari. Ci sono considerazioni speciali da affrontare? Alcuni consigli che ho trovato durante la ricerca di questo argomento erano di usare un flusso di lavoro che evitasse il più possibile le fusioni. Forse non condividi questo sentimento, ma la mia domanda è più specifica nei confronti di problemi specifici di unity3d piuttosto che delle preferenze generali del flusso di lavoro.
Premendo sempre il

3
Usiamo un allegato git per gestire il nostro ampio contenuto binario. Il supporto di Windows non è eccezionale ma sta migliorando. Questo è utile solo se non ti interessa tenere traccia dei giri in file binari di grandi dimensioni.
Jerdak,

2
Un aggiornamento a questo: abbiamo provato la tua configurazione e ha funzionato abbastanza bene, ma volevamo che le nostre risorse venissero sincronizzate automaticamente. Ora utilizziamo sugarsync per sincronizzare selettivamente la cartella delle risorse binarie. Dropbox sincronizzerebbe solo la cartella dropbox, ma con Sugar Sync puoi sincronizzare arbitrariamente le cartelle ovunque sul disco rigido, il che è estremamente utile. Abbiamo dovuto modificare un po 'la struttura della nostra directory delle risorse per definire una sottocartella per questi file binari di grandi dimensioni, ma finora ha funzionato davvero bene. Abbiamo semplicemente .gitignore quella cartella e consentiamo a Sugar Sync di mantenerlo sincronizzato.
Premendo sempre il

2
Perché scegliere Hidden Meta Files?
Slipp D. Thompson,

2
Risolto il mio errore di battitura per copia e incolla - Sì, dovrebbe essere Meta File visibile.
S.Richmond,

60

In Unity 4.3 è stato anche necessario abilitare l'opzione External dalle preferenze, ma da Unity 4.5 hanno abbandonato l'opzione per questo, quindi il processo di installazione completo appare come:

  1. Passa a Visible Meta FilesinEditor → Project Settings → Editor → Version Control Mode
  2. Passa a Force TextinEditor → Project Settings → Editor → Asset Serialization Mode
  3. Salva scena e progetto dal Filemenu

Inoltre il nostro team sta utilizzando un .gitignorefile 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 uniche cartelle che devi tenere sotto controllo del codice sorgente sono Assetse ProjectSettings.

Maggiori informazioni su come mantenere il progetto Unity sotto il controllo del codice sorgente sono disponibili in questo post .


Potrebbe essere meglio se modifichi la mia risposta in alto per includere queste nuove opzioni. :)
S.Richmond,

6
Perché scegliere Hidden Meta Files?
Slipp D. Thompson,

Il punto uno è chiaramente sbagliato. Non c'è Unità → Preferenze → Pacchetti → Deposito
Agostino

1
secondo docs.unity3d.com/Manual/… dovrebbe essere Visible Meta Files
Markus

1
Funziona bene per la mia squadra. Grazie mille.
eifersucht

34

Che cos'è GIT?

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

Se vuoi saperne di più su GIT, consulta questa guida rapida ,

Prima di tutto assicurati di avere il tuo ambiente Git configurato. Devi impostare 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 con Github.com,

GitHub è il posto dove condividere il codice con amici, colleghi, compagni di classe e sconosciuti completi. Oltre cinque milioni di persone usano GitHub per costruire cose straordinarie insieme.

Impostazioni di Unity3d

Devi fare queste impostazioni

Passa a Meta file visibili in Modifica → Impostazioni progetto → Editor → Modalità controllo versione.

inserisci qui la descrizione dell'immagine

Abilita opzione esterna in Unity → Preferenze → Pacchetti → Repository

inserisci qui la descrizione dell'immagine

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

inserisci qui la descrizione dell'immagine

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


6
+1 Questa risposta è già stata scritta sopra, ma la risposta di @NabeelSaleem mi ha aiutato con le immagini fornite e una guida chiara :) grazie
aflatoon,

3
Non riesco a trovare Preferences > Packagesin Unity 5.x Normale? ty
Yves Lange,

5
@NabeelSaleem yes. In realtà questo passaggio in Unity 5.x non è necessario. ty
Yves Lange,

22

Per aggiungere tutto quanto dichiarato, è anche ideale usare git lfs con Unity. Lo uso da quando è uscito e non ho avuto problemi.

Ti consigliamo di aggiungere questo .gitattributesaccanto al tuo .gitignorefile

*.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 si utilizzano file binari aggiuntivi non elencati, aggiungerli.

Ho anche i file configurati per usare yamlmerge, dovresti configurarlo. Puoi leggerlo qui: http://docs.unity3d.com/Manual/SmartMerge.html


11

Ora abbiamo una perfetta integrazione all'unità con l'estensione da Github a Unity ... https://unity.github.com/

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

Al momento in cui scrivo il progetto è in alpha, ma è ancora utilizzabile per progetti personali.


hai provato questo?
Nabeel K,

11

Ho pensato che avrei potuto pubblicare un post più semplice .gitignoreper chiunque fosse interessato:

# Ignore Everything
/*

# Except for these:
!/.gitignore
!/Assets
!/Packages
!/ProjectSettings

7
Ancora una volta, tutte queste risposte sono abbastanza obsolete in questa pagina. se per qualche motivo devi usare git con Unity, github.com/github/gitignore/blob/master/Unity.gitignore
Fattie

Piccolo, semplice e pienamente compatibile con tutte le versioni: trovo che questo script funzioni al meglio, anche per Unity 2017 e 2018 che hanno recentemente cambiato la struttura del progetto ( UnityPackageManager/e Packages/).
Isaak Eriksson,

8

Le cose principali da ricordare quando si utilizza git per il controllo della versione del codice sorgente di unity-3d:

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

(B) Usa "Meta file visibili" - per le più recenti versioni di unità - 5.3.4 e successive ciò avviene di default. Per alcune delle versioni precedenti è necessario modificare le impostazioni in: Modifica-> Impostazioni progetto-> Controllo versione

(C) Utilizzare un file .gitignore per Unity- per assicurarsi che venga mantenuta la sanità mentale e che i file non vengano aggiunti inutilmente - se su Android / Tizen - aggiungere regole per escludere i file APK e TPK dall'aggiunta al repository. Google in giro per un file .gitignore per 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. Pensa a posteriori sul perché ciò è accaduto, ma al giorno d'oggi copio e aggiungo il file .gitignore come primo passo per impostare il 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 [nome utente] \ Downloads.gitignore.

(4) git aggiungi .gitignore

(5) aggiungi git *

Spero che questo aiuti ... tutto il meglio!


6

Edit -> Project Settings -> Editor

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

Penso che sia questo ciò che vuoi.


1
E poi come si configura l'unione YAML?
shinzou,


6

Puoi usare Github per Unity , un'estensione Unity che porta il flusso di lavoro git nell'interfaccia utente di Unity.

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


5

Solo le risorse e le impostazioni di progetto cartelle devono essere sotto il controllo della versione di 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/

3

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

inserisci qui la descrizione dell'immagine


1

Basta aggiungere il sottoprogetto di Gitignore. Il modo consigliato ignora Library e Temp, solo se è nella radice del tuo progetto git. se sei come me e qualche volta hai bisogno del progetto di unità per far parte del repository, non dell'intero repository, le stringhe corrette in gitignore sarebbero:

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

0

Volevo aggiungere un flusso di lavoro molto semplice da qualcuno che è stato frustrato con Git in passato. Esistono diversi modi per utilizzare git, probabilmente i più comuni per unità sono GitHub Desktop, Git Bash e GitHub Unity

https://assetstore.unity.com/packages/tools/version-control/github-for-unity-118069 .

Essenzialmente fanno tutti la stessa cosa, ma la sua scelta dell'utente. Puoi avere git per la configurazione di file di grandi dimensioni che consente 1 GB di spazio libero per l'archiviazione di file di grandi dimensioni con spazio di archiviazione aggiuntivo disponibile nei pacchetti di dati per $ 4 / mese per 50 GB, e questo ti permetterà di inviare file> 100 mb in repository remoti (memorizza i file effettivi su un server e nel tuo repository un puntatore)

https://git-lfs.github.com/

Se non vuoi installare lfs per qualsiasi motivo, puoi scansionare i tuoi progetti per file> 128 mb in Windows digitando size: large nella directory in cui hai il tuo progetto. Questo può essere utile per cercare file di grandi dimensioni, anche se potrebbero mancare alcuni file tra 100 e 128 MB.

inserisci qui la descrizione dell'immagine

Il formato generale di git bash è

git add. (aggiunge i file da confermare)

git commit -m 'message' (esegue il commit dei file con un messaggio, sono ancora sul tuo PC e non nel repository remoto, in pratica sono stati "versionati" come nuovo commit)

git push (push dei file nel repository)

Lo svantaggio di git bash per i progetti di unità è che se c'è un file> 100mb, non si otterrà un errore finché non si preme. È quindi necessario annullare il commit ripristinando la testa al commit precedente. Un po 'una seccatura, specialmente se sei nuovo con Git Bash.

Il vantaggio di GitHub Desktop è PRIMA di eseguire il commit di file con 100 MB che visualizzeranno un messaggio di errore popup. È quindi possibile ridurre quei file o aggiungerli a un file .gitignore.

Per utilizzare un file .gitignore, creare un file chiamato .gitignore nella directory principale del repository locale. Aggiungi semplicemente i file una riga alla volta che desideri omettere. I file SharedAsset e altri file di cartelle non Asset possono di solito essere omessi e si ripopolano automaticamente nell'editor (i pacchetti possono essere reimportati ecc.). È inoltre possibile utilizzare i caratteri jolly per escludere i tipi di file.

Se altre persone utilizzano il repository GitHub e si desidera clonare o estrarre, tali opzioni sono disponibili anche sul desktop GitHub o su Git Bash.

Non ho parlato molto del pacchetto Unity GitHub in cui è possibile utilizzare GitHub nell'editor perché personalmente non ho trovato l'interfaccia molto utile e non penso che nel complesso aiuterà qualcuno a familiarizzare con git, ma questo è solo il mio preferenza.

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.