it-swarm.com.de

Wie verwende ich Git für Unity3D Source Control?

Was sind bewährte Methoden für die Verwendung von Git Quellcodeverwaltung in Unity 3D, insbesondere im Umgang mit der Binärfunktion von Unity 3D-Projekten? Beschreiben Sie den Workflow, welche Pfade in .gitignore enthalten wären, welche Einstellungen in Unity und/oder im Projekt vorgenommen werden sollten und welche weiteren Besonderheiten zu beachten sind.

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

466

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 unten genannten Problem befasst. Sie können jetzt einfach und effizient große Binärdateien versionieren!

Git kann mit sofort einsatzbereiten 3D-Spielen problemlos funktionieren. Die größte Einschränkung hierbei ist jedoch, dass die Versionierung großer Mediendateien (> 5 MB) auf lange Sicht ein Problem darstellen kann, da der Commit-Verlauf aufgebläht ist. Wir haben dieses potenzielle Problem in unseren Projekten gelöst, indem wir das binäre Asset nur dann versionieren, wenn es als endgültig eingestuft 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 (nicht) ist Viele Künstler werden Git aktiv nutzen wollen!).

Git Workflow

Ihr Git-Workflow ist eine Frage, die Sie aufgrund Ihrer eigenen Erfahrungen als Team und Ihrer Zusammenarbeit für sich selbst entscheiden müssen. Jedoch. Ich würde die entsprechend benannte Git Flow Methode wie vom ursprünglichen Autor hier beschrieben empfehlen.

Ich werde hier nicht zu sehr darauf eingehen, wie die Methodik funktioniert, da der Autor sie perfekt beschreibt und dies auch in wenigen Worten, so dass es einfach ist, durchzukommen. Ich arbeite jetzt schon eine Weile mit meinem Team und es ist der beste Workflow, den wir bisher versucht 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. Aber ich möchte das kostenlose SourceTree-Anwendung vorschlagen, da es sich perfekt in die Git Flow-Erweiterung einfügt. Lesen Sie das SourceTree-Tutorial hier zum Implementieren der Git Flow-Methodik in ihrer Anwendung.

Unity3D Ordner ignorieren

Für eine aktuelle Version Check-out Github gepflegt Unity.gitignore-Datei ohne Angaben zum Betriebssystem.

# =============== #
# 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 Option External in Unity → Preferences → Packages → Repository.
  2. Öffnen Sie das Menü Edit und wählen Sie Project Settings → Editor:
    1. Schalten Sie Version Control Mode auf Visible Meta Files.
    2. Schalten Sie Asset Serialization Mode auf Force Text.
  3. Speichern Sie die Szene und das Projekt aus dem Menü File.

Möchten Sie Ihr vorhandenes Repo auf LFS migrieren?

Sehen Sie sich meinen Blog-Beitrag für Schritte an wie es hier gemacht wird .

Zusätzliche Konfiguration

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

Diesen Git-Post-Merge-Hook hinzufügen zum Ordner /.git/hooks/ für Repositorys mit darin enthaltenen Unity3D-Projekten. Nach jedem Git-Pull/Merge wird geprüft, welche Dateien entfernt wurden, ob das Verzeichnis, in dem es existiert, leer ist, und falls ja, löschen.

495
S.Richmond

In Unity 4.3 mussten Sie auch die externe Option aus den Einstellungen aktivieren, aber seit Unity 4.5 haben sie die Option dafür entfernt, sodass der vollständige Setup-Prozess folgendermaßen aussieht:

  1. Wechseln Sie zu Visible Meta Files in Editor → Project Settings → Editor → Version Control Mode
  2. Wechseln Sie zu Force Text in Editor → Project Settings → Editor → Asset Serialization Mode
  3. Speichern Sie Szene und Projekt aus dem Menü File

Unser Team verwendet auch eine etwas erweiterte .gitignore -Datei:

# =============== #
# 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 Versionskontrolle halten müssen, Assets und ProjectSettings sind.

Weitere Informationen dazu, wie Sie Unity Project unter Versionskontrolle halten, finden Sie in dieser Beitrag .

55
zasadnyy

Was ist GIT?

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

Wenn Sie mehr über GIT erfahren möchten, überprüfen Sie diese Kurzanleitung ,

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

GIT-Client-Anwendung Mac/Windows

Für GIT GUI-Client-Anwendung empfahl ich Ihnen, mit Github.com zu gehen,

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 in Bearbeiten → Projekteinstellungen → Editor → Versionskontrollmodus zu sichtbaren Metadateien.

enter image description here

Aktivieren Sie die externe Option in Unity → Einstellungen → Pakete → Repository

enter image description here

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

enter image description here

Quelle: Verwenden von Git mit 3D-Spielen Quellcodeverwaltung

33
NabeelSaleem

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

Sie möchten diesen .gitattributes neben Ihrer .gitignore -Datei 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 sie hinzu.

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

19
rygo6

Ich dachte, dass ich für jeden, der interessiert ist, einen einfacheren .gitignore posten könnte:

# Ignore Everything
/*

# Except for these:
!/.gitignore
!/Assets
!/Packages
!/ProjectSettings
9
Get Off My Lawn

Wir haben jetzt eine nahtlose Integration in Unity mit der Erweiterung von Github in 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.

8
Bhupen

Ich würde es vorziehen, wenn Sie BitBucket verwenden, da es nicht öffentlich ist und es ein offizielles Tutorial von Unity zu Bitbucket gibt.

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

hoffe das hilft.

5
Nipun David

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

(A) Checken Sie NICHT den Bibliotheksordner ein . Ich habe diesen Fehler in der Vergangenheit mehrmals gemacht und dafür gelitten! Löschen Sie OR 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. Bei einigen 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 Sicherheit gewahrt bleibt und Dateien nicht unnötig hinzugefügt werden - wenn Android/tizen - Regeln hinzufügen, um das Hinzufügen von APK- und TPK-Dateien zum Repository auszuschließen. Google sucht nach einer .gitignore-Datei für Unity OR Andernfalls verwenden Sie das von GitHub bereitgestellte Modell .gitignore für Unity: 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 das Hinzufügen der .gitignore-Datei in der Vergangenheit persönlich versäumt habe. Ich 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 zum Einrichten des Repositorys hinzu.

Gehen Sie folgendermaßen 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 [yourusername]\Downloads.gitignore.

(4) git add .gitignore

(5) git add *

Hoffe das hilft ... alles Gute!

5
Naligator

Edit -> Project Settings -> Editor

Versionskontrolle auf Metadateien einstellen. Legen Sie die Asset-Serialisierung fest, um Text zu erzwingen.

Ich denke das ist was du willst.

5
afpro

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

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

4
Kyle B

Nur die Ordner Assets und ProjectSettings müssen der Git-Versionskontrolle unterliegen.

Du kannst so einen Gitignore machen.

[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/
4
EllisonLee

Unity bietet auch eine eigene Versionskontrolle. vor unity5 war es unityAsset Server, aber jetzt ist es abgeschrieben. und starten Sie ein neues SVN-Steuerungssystem namens Unity Collaborate. Aber nicht von SVN geben uns die Möglichkeit, diese Art von Konflikten zu lösen oder Szenen zu verschmelzen. Also hänge von dir ab, mit welchem ​​SVN du vertraut bist. Ich verwende das SmartSVN-Tool auf dem Mac. und Schildkröte an Fenstern.

enter image description here

2
Shahbaz Ali

Fügen Sie einfach das Subjet von Gitignore hinzu. Die empfohlene Methode ignoriert Library und Temp nur, wenn sie sich im Stammverzeichnis Ihres Git-Projekts befinden. wenn du wie ich bist und manchmal ein einheitsprojekt brauchst, um ein teil des repos zu sein, und nicht des gesamten repos, dann sind die richtigen saiten in gitignore:

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