Wie verwende ich Git für die Unity3D-Quellcodeverwaltung?

499

Was sind Best Practices für die Verwendung der Git- Quellcodeverwaltung mit Unity 3D, insbesondere im Umgang mit der Binärität von Unity 3D-Projekten? Bitte beschreiben Sie den Workflow, welche Pfade in .gitignore enthalten sein würden, welche Einstellungen in Unity und / oder im Projekt festgelegt werden sollten und welche anderen besonderen Dinge zu beachten sind.

Hinweis: Mir ist klar, dass die Verwendung des Asset Servers die von Unity empfohlene Methode ist, aber ich möchte Git aus verschiedenen Gründen verwenden. Bitte keine Antworten, die besagen oder argumentieren, dass ich nur den Asset Server verwenden sollte. Der Asset Server ist für mich wirklich keine Option.

Immer drücken
quelle
3
"benutze einfach svn" unabhängig von sinnlosen git V svn-Argumenten, git ist einfach nicht für große Binärdateien. Unity-Projekte sind Filme (und verschiedene riesige Binärdateien - Texturen usw.) mit einer Handvoll Codezeilen. Würden Sie Git verwenden, um Ihre Filmsammlung zu speichern? svn ist zumindest vernünftig.
Fattie
1
Die einfachste Lösung besteht darin, einfach alle Binärordner mit gitignore auszuschließen und git nur für Ihre eigentlichen Codedateien und möglicherweise für Ihre Asset-Dateien zu verwenden. Alle Binärdateien müssen nicht enthalten sein, da jedes Teammitglied sie für sich selbst kompilieren kann.
Kokodoko
@Kokodoko Künstler können ihre eigenen ausführbaren Dateien nicht kompilieren.
Crashworks
Selbst wenn das wahr wäre, könnten sie immer noch neue Bild-Assets auf den Prüfstand stellen ... damit die Entwickler mit dem neuen Kunstwerk kompilieren können ...
Kokodoko
@Kokodoko Das bedeutet, dass ein Künstler warten muss, bis ein Entwickler das Commit sieht und einen Build erstellt, um seine Änderungen im Spiel zu sehen. Das ist eine sehr lange Iterationszeit.
Crashworks

Antworten:

522

Das Folgende ist ein Auszug aus meinem persönlichen Blog .

Verwenden von Git mit 3D-Spielen

Update Oktober 2015: GitHub hat seitdem ein Plugin für Git namens Git LFS veröffentlicht , das sich direkt mit dem folgenden Problem befasst. Sie können jetzt einfach und effizient große Binärdateien versionieren!

Git kann mit sofort einsatzbereiten 3D-Spielen problemlos funktionieren. Die wichtigste Einschränkung hierbei ist jedoch, dass die Versionierung großer Mediendateien (> 5 MB) auf lange Sicht ein Problem sein kann, da sich Ihr Commit-Verlauf aufbläht. Wir haben dieses potenzielle Problem in unseren Projekten gelöst, indem wir das binäre Asset nur dann versioniert haben, wenn es als endgültig angesehen wird. Unsere 3D-Künstler verwenden Dropbox , um an WIP-Assets zu arbeiten, sowohl aus dem oben genannten Grund als auch weil es viel schneller und einfacher ist (nicht viele Künstler werden Git aktiv nutzen wollen!).

Git Workflow

Ihr Git-Workflow ist etwas, das Sie aufgrund Ihrer eigenen Erfahrungen als Team und Ihrer Zusammenarbeit selbst entscheiden müssen. Jedoch. Ich würde die entsprechend benannte Git Flow- Methode, wie sie vom ursprünglichen Autor hier beschrieben wurde, dringend empfehlen .

Ich werde hier nicht zu sehr darauf eingehen, wie die Methodik funktioniert, da der Autor sie perfekt und in wenigen Worten beschreibt, so dass es einfach ist, durchzukommen. Ich arbeite jetzt schon eine Weile mit meinem Team zusammen und es ist der beste Workflow, den wir bisher ausprobiert haben.

Git GUI Client-Anwendung

Dies ist hier wirklich eine persönliche Präferenz, da es einige Optionen in Bezug auf die Git-GUI gibt oder ob überhaupt eine GUI verwendet werden soll. Ich möchte jedoch die kostenlose SourceTree-Anwendung vorschlagen, da sie sich perfekt in die Git Flow-Erweiterung einfügt . Lesen Sie hier das SourceTree-Tutorial zur Implementierung der Git Flow-Methodik in ihrer Anwendung.

Unity3D-Ordner ignorieren

Für eine aktuelle Versionsprüfung hat Github die Unity.gitignore-Datei ohne Betriebssystemspezifikationen verwaltet.

# =============== #
# 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

Unity3D-Einstellungen

Für Versionen von Unity 3D v4.3 und höher:

  1. (Überspringen Sie diesen Schritt in Version 4.5 und höher.) Aktivieren Sie die ExternalOption in Unity → Preferences → Packages → Repository.
  2. Öffnen Sie das EditMenü und wählen Sie Project Settings → Editor:
    1. Wechseln Sie Version Control Modezu Visible Meta Files.
    2. Wechseln Sie Asset Serialization Modezu Force Text.
  3. Speichern Sie die Szene und das Projekt aus dem FileMenü.

Möchten Sie Ihr vorhandenes Repo auf LFS migrieren?

In meinem Blogbeitrag finden Sie Schritte dazu .

Zusätzliche Konfiguration

Eines der wenigen großen Probleme bei der Verwendung von Git mit Unity3D-Projekten ist, dass Git sich nicht um Verzeichnisse kümmert und nach dem Entfernen von Dateien gerne leere Verzeichnisse zurücklässt. Unity3D erstellt * .meta-Dateien für diese Verzeichnisse und kann zu einem Kampf zwischen Teammitgliedern führen, wenn Git-Commits diese Metadateien weiterhin hinzufügen und entfernen.

Fügen Sie diesen Git-Post-Merge-Hook zum /.git/hooks/Ordner für Repositorys mit Unity3D-Projekten hinzu. Nach jedem Git-Pull / Merge wird überprüft, welche Dateien entfernt wurden, ob das Verzeichnis, in dem es vorhanden war, leer ist, und wenn ja, gelöscht.

S.Richmond
quelle
2
Die Erwähnung des Git-Workflows ist nett, aber vielleicht sollte ich in meiner Frage klarstellen, welche Workflows für Unity 3D besonders spezifisch sind. Wie Sie vielleicht wissen, sind Unity-Projekte stark von Binärdateien abhängig. Gibt es spezielle Überlegungen, um damit umzugehen? Einige Empfehlungen, die ich bei der Untersuchung dieses Themas gefunden habe, waren die Verwendung eines Workflows, bei dem Zusammenführungen so weit wie möglich vermieden wurden. Vielleicht teilen Sie dieses Gefühl nicht, aber meine Frage bezieht sich eher auf Unity3d-spezifische Themen als auf allgemeine Workflow-Einstellungen.
Drücken Sie immer
3
Wir verwenden einen Git-Anhang , um unseren großen binären Inhalt zu verwalten. Die Windows-Unterstützung ist nicht großartig , wird aber immer besser. Dies ist nur hilfreich, wenn Sie die Drehzahl in großen Binärdateien nicht nachverfolgen möchten.
Jerdak
2
Ein Update dazu - wir haben Ihr Setup ausprobiert und es hat ziemlich gut funktioniert, aber wir wollten, dass unsere Assets automatisch synchronisiert werden. Wir verwenden jetzt sugarsync, um den Ordner für binäre Assets selektiv zu synchronisieren. Dropbox würde nur den Dropbox-Ordner synchronisieren, aber mit Sugar Sync können Sie Ordner beliebig überall auf der Festplatte synchronisieren, was äußerst nützlich ist. Wir mussten unsere Assets-Verzeichnisstruktur ein wenig ändern, um einen Unterordner für diese großen Binärdateien zu definieren, aber bisher hat es wirklich gut funktioniert. Wir haben diesen Ordner nur .gitignore und erlauben die Zuckersynchronisierung, um ihn synchron zu halten.
Drücken Sie immer
2
Warum die Wahl zu gehen Hidden Meta Files?
Slipp D. Thompson
2
Fehler beim Kopieren und Einfügen behoben - Ja, es sollten sichtbare Metadateien sein.
S.Richmond
60

In Unity 4.3 mussten Sie auch die Option Extern aus den Einstellungen aktivieren, aber seit Unity 4.5 haben sie die Option dafür gelöscht, sodass der vollständige Einrichtungsprozess wie folgt aussieht:

  1. Wechseln Sie zu Visible Meta FilesinEditor → Project Settings → Editor → Version Control Mode
  2. Wechseln Sie zu Force TextinEditor → Project Settings → Editor → Asset Serialization Mode
  3. Speichern Sie Szene und Projekt aus dem FileMenü

Auch unser Team verwendet eine etwas erweiterte .gitignoreDatei:

# =============== #
# 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

Beachten Sie, dass die einzigen Ordner, die Sie unter Quellcodeverwaltung halten müssen, Assetsund sind ProjectSettings.

Weitere Informationen dazu, wie Sie Unity Project unter Quellcodeverwaltung halten können, finden Sie in diesem Beitrag .

zasadnyy
quelle
Könnte besser sein, wenn Sie meine Antwort oben bearbeiten, um diese neuen Optionen einzuschließen. :)
S.Richmond
6
Warum die Wahl zu gehen Hidden Meta Files?
Slipp D. Thompson
Punkt eins ist eindeutig falsch. Es gibt keine Einheit → Einstellungen → Pakete → Repository
Agostino
1
laut docs.unity3d.com/Manual/… sollte es sichtbare Metadateien sein
Markus
1
Funktioniert gut für mein Team. Vielen Dank.
eifersucht
34

Was ist GIT?

Git ist ein kostenloses und Open Source verteiltes Versionskontrollsystem (SCM), das 2005 von Linus Torvalds (Linux OS-Gründer) entwickelt wurde. Es wurde entwickelt, um alles von kleinen bis zu großen Projekten schnell und effizient zu steuern. Führende Unternehmen wie Google, Facebook und Microsoft nutzen GIT täglich.

Wenn Sie mehr über GIT erfahren möchten, lesen Sie dieses Quick-Tutorial .

Stellen Sie zunächst sicher, dass Sie Ihre Git-Umgebung eingerichtet haben. Sie müssen sowohl Ihre lokale Umgebung als auch ein Git-Repository einrichten (ich bevorzuge Github.com).

GIT-Client-Anwendung Mac / Windows

Für die GIT GUI Client-Anwendung habe ich empfohlen, sich für Github.com zu entscheiden.

GitHub ist der Ort, an dem Sie Code mit Freunden, Kollegen, Klassenkameraden und völlig Fremden teilen können. Über fünf Millionen Menschen nutzen GitHub, um gemeinsam erstaunliche Dinge zu bauen.

Unity3d-Einstellungen

Sie müssen diese Einstellungen vornehmen

Wechseln Sie unter Bearbeiten → Projekteinstellungen → Editor → Versionskontrollmodus zu Sichtbare Metadateien.

Geben Sie hier die Bildbeschreibung ein

Aktivieren Sie die Option Extern unter Unity → Einstellungen → Pakete → Repository

Geben Sie hier die Bildbeschreibung ein

Wechseln Sie unter Bearbeiten → Projekteinstellungen → Editor → Asset-Serialisierungsmodus zu Text erzwingen.

Geben Sie hier die Bildbeschreibung ein

Quelle: Verwenden von Git mit 3D-Spielen Quellcodeverwaltung

NabeelSaleem
quelle
6
+1 Diese Antwort ist bereits oben geschrieben, aber @NabeelSaleem Antwort half mir mit Bildern, die er zur Verfügung stellte und klare Anleitung :) Danke
Aflatoon
3
Ich kann Preferences > Packagesin Unity 5.x Normal nicht finden ? ty
Yves Lange
5
@NabeelSaleem ja. Tatsächlich ist dieser Schritt in Unity 5.x nicht erforderlich. ty
Yves Lange
22

Um alles zu ergänzen, ist es auch ideal, git lfs mit Unity zu verwenden. Ich benutze dies seit es herauskam und ich hatte keine Probleme damit.

Sie möchten dies .gitattributesneben Ihrer .gitignoreDatei hinzufügen

*.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

Das ist meine fortlaufende Dateiliste. Wenn Sie zusätzliche Binärdateien verwenden, die nicht aufgeführt sind, fügen Sie diese hinzu.

Ich habe auch Dateien konfiguriert, um yamlmerge zu verwenden, Sie müssten dies einrichten. Sie können darüber hier lesen: http://docs.unity3d.com/Manual/SmartMerge.html

rygo6
quelle
11

Wir haben jetzt eine nahtlose Integration in die Einheit mit der Erweiterung Github to Unity ... https://unity.github.com/

Die neue GitHub for Unity-Erweiterung bringt den GitHub-Workflow und mehr in Unity und bietet Unterstützung für große Dateien mit Git LFS und Dateisperrung.

Zum Zeitpunkt des Schreibens ist das Projekt in Alpha, kann aber weiterhin für persönliche Projekte verwendet werden.

Bhupen
quelle
hast du das versucht
Nabeel K
11

Ich dachte, ich könnte .gitignorefür jeden, der interessiert ist, einen einfacheren Beitrag veröffentlichen :

# Ignore Everything
/*

# Except for these:
!/.gitignore
!/Assets
!/Packages
!/ProjectSettings
Geh von meinem Rasen runter
quelle
7
Auch hier sind alle diese Antworten auf dieser Seite ziemlich veraltet. Wenn Sie aus irgendeinem Grund Git mit Unity verwenden müssen, github.com/github/gitignore/blob/master/Unity.gitignore
Fattie
Klein, einfach und vollständig kompatibel mit allen Versionen: Ich finde, dass dieses Skript am besten funktioniert, selbst für Unity 2017 und 2018, die kürzlich ihre Projektstruktur ( UnityPackageManager/und Packages/) geändert haben .
Isaak Eriksson
8

Die wichtigsten Dinge, die Sie bei der Verwendung von git für die Versionskontrolle des Unity-3D-Quellcodes beachten sollten:

(A) Checken Sie NICHT in den Bibliotheksordner ein . Ich habe diesen Fehler in der Vergangenheit mehrmals gemacht und dafür gelitten! Löschen ODER verschieben Sie den Bibliotheksordner, bevor Sie Ihr Projekt / Ihre Dateien zu git hinzufügen.

(B) Verwenden Sie "Visible Meta Files" - für die neuesten Unity-Versionen - 5.3.4 und höher. Dies geschieht standardmäßig. Für einige der früheren Versionen müssen Sie die Einstellungen unter Bearbeiten-> Projekteinstellungen-> Versionskontrolle ändern

(C) Verwenden Sie eine Gitignore-Datei für Unity, um sicherzustellen, dass die Vernunft erhalten bleibt und Dateien nicht unnötig hinzugefügt werden - wenn Sie sich auf Android / Tizen befinden - fügen Sie Regeln hinzu, um das Hinzufügen von APK- und TPK-Dateien zum Repository auszuschließen. Google sucht nach einer .gitignore-Datei für Unity ODER verwendet dieses von GitHub bereitgestellte .gitignore for Unity-Modell: https://github.com/github/gitignore/blob/master/Unity.gitignore

(D) Stellen Sie sicher, dass die Gitignore-Datei als erste hinzugefügte Datei zum Repository hinzugefügt wird, da ich in der Vergangenheit das Hinzufügen der Gitignore-Datei persönlich verpasst habe. Habe im Nachhinein viele Gedanken darüber, warum dies passiert ist - aber heutzutage kopiere ich einfach die Gitignore-Datei und füge sie als ersten Schritt beim Einrichten des Repositorys hinzu.

Gehen Sie wie folgt vor, um ein Unity-Projekt für Git vorzubereiten:

(1) Gehen Sie zum Projektordner

(2) Geben Sie git init ein.

(3) Kopieren Sie die .gitignore-Datei: Unter MacOS: cp ~ / Downloads / .gitignore Unter Windows: Kopieren Sie c: \ Users [Ihr Benutzername] \ Downloads.gitignore.

(4) git add .gitignore

(5) git add *

Hoffe das hilft ... alles Gute!

Naligator
quelle
6

Edit -> Project Settings -> Editor

Stellen Sie die Versionskontrolle auf Metadateien ein. Stellen Sie die Asset-Serialisierung so ein, dass Text erzwungen wird.

Ich denke, das ist was du willst.

afpro
quelle
1
Und wie richten Sie dann die YAML-Zusammenführung ein?
Shinzou
6

Sie können Github for Unity verwenden , eine Unity-Erweiterung , die den Git-Workflow in die Benutzeroberfläche von Unity integriert.

Github for Unity hat gerade Version 1.0 der Erweiterung veröffentlicht.

Kyle B.
quelle
5

Nur die Ordner Assets und ProjectSettings müssen unter Git-Versionskontrolle stehen.

Sie können einen Gitignore wie diesen erstellen.

[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/
EllisonLee
quelle
3

Unity bietet auch eine eigene Versionskontrolle für die Quellversion. Vor Unity5 war es UnityAsset Server, aber jetzt wird es abgeschrieben. und starten Sie ein neues SVN-Steuerungssystem namens Unity Collaborate. Das Hauptproblem bei der Verwendung von Unity und jedem SVN ist das Festschreiben und Zusammenführen von Szenen. Aber Non of Svn gibt uns die Möglichkeit, diese Art von Konflikten zu lösen oder Szenen zusammenzuführen. Hängen Sie also von Ihnen ab, mit welcher SVN Sie vertraut sind. Ich verwende das SmartSVN-Tool auf einem Mac. und Schildkröte an Fenstern.

Geben Sie hier die Bildbeschreibung ein

Shahbaz Ali
quelle
1

Fügen Sie einfach den Subjet von Gitignore hinzu. Der empfohlene Weg ignoriert Library und Temp nur, wenn er im Stammverzeichnis Ihres Git-Projekts enthalten ist. Wenn Sie wie ich sind und manchmal ein Einheitsprojekt benötigen, um Teil des Repos zu sein, nicht das gesamte Repo, wären die richtigen Zeichenfolgen in gitignore:

**/[Tt]emp
**/[Ll]ibrary
**/[Bb]uild
Zambari
quelle
0

Ich wollte einen sehr einfachen Workflow von jemandem hinzufügen, der in der Vergangenheit mit Git frustriert war. Es gibt verschiedene Möglichkeiten, Git zu verwenden. Die wahrscheinlich häufigsten für Unity sind GitHub Desktop, Git Bash und GitHub Unity

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

Im Wesentlichen machen sie alle dasselbe, aber die Wahl des Benutzers. Sie können Git für die Einrichtung großer Dateien verwenden, das 1 GB freien Speicher für große Dateien mit zusätzlichem Speicherplatz in Datenpaketen für 4 USD / Monat für 50 GB ermöglicht. Auf diese Weise können Sie Dateien> 100 MB in Remote-Repositorys übertragen (die tatsächlichen Dateien werden auf einem Computer gespeichert) Server und in Ihrem Repo einen Zeiger)

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

Wenn Sie lfs aus irgendeinem Grund nicht einrichten möchten, können Sie Ihre Projekte in Windows nach Dateien> 128 MB durchsuchen, indem Sie size: large in das Verzeichnis eingeben, in dem Sie Ihr Projekt haben. Dies kann nützlich sein, um nach großen Dateien zu suchen, obwohl möglicherweise einige Dateien zwischen 100 MB und 128 MB übersehen werden.

Geben Sie hier die Bildbeschreibung ein

Das allgemeine Format von Git Bash ist

git hinzufügen. (Fügt Dateien hinzu, die festgeschrieben werden sollen)

git commit -m 'message' (schreibt die Dateien mit einer Nachricht fest, sie befinden sich immer noch auf Ihrem PC und nicht im Remote-Repo, im Grunde wurden sie als neues Commit 'versioniert')

Git Push (Push-Dateien in das Repository)

Der Nachteil von git bash für Unity-Projekte ist, dass bei einer Datei> 100 MB erst beim Push ein Fehler angezeigt wird. Sie müssen dann Ihr Commit rückgängig machen, indem Sie Ihren Kopf auf das vorherige Commit zurücksetzen. Ein bisschen Ärger, besonders wenn Sie neu mit Git Bash sind.

Der Vorteil von GitHub Desktop besteht darin, dass vor dem Festschreiben von Dateien mit 100 MB eine Popup-Fehlermeldung angezeigt wird. Sie können diese Dateien dann verkleinern oder einer Gitignore-Datei hinzufügen.

Um eine Gitignore-Datei zu verwenden, erstellen Sie eine Datei mit dem Namen Gitignore in Ihrem lokalen Repository-Stammverzeichnis. Fügen Sie die Dateien einfach zeilenweise hinzu, die Sie weglassen möchten. SharedAssets und andere Nicht-Asset-Ordnerdateien können normalerweise weggelassen werden und werden automatisch im Editor neu gefüllt (Pakete können erneut importiert werden usw.). Sie können auch Platzhalter verwenden, um Dateitypen auszuschließen.

Wenn andere Leute Ihr GitHub-Repo verwenden und Sie klonen oder ziehen möchten, stehen Ihnen diese Optionen auch auf dem GitHub-Desktop oder der Git-Bash zur Verfügung.

Ich habe nicht viel über das Unity GitHub-Paket erwähnt, in dem Sie GitHub im Editor verwenden können, da ich persönlich die Benutzeroberfläche nicht sehr nützlich fand und ich denke, dass sie insgesamt niemandem helfen wird, sich mit Git vertraut zu machen, aber dies ist nur meine Präferenz.

Vasmos
quelle