572 Stimmen

Wie verwendet man Git für Unity3D Quellcode-Verwaltung?

Was sind bewährte Verfahren für die Verwendung von Git Quellcodeverwaltung mit Unity 3D, insbesondere im Umgang mit der binären Natur von Unity 3D Projekten? Bitte beschreiben Sie den Workflow, welche Pfade in .gitignore enthalten sein sollten, welche Einstellungen in Unity und/oder im Projekt vorgenommen werden sollten und alle anderen besonderen Dinge, die beachtet werden sollten.

Hinweis: Mir ist bewusst, dass die Verwendung des Asset Servers der von Unity empfohlene Weg ist, aber ich würde aus verschiedenen Gründen gerne Git verwenden. Bitte keine Antworten, die behaupten oder argumentieren, dass ich einfach den Asset Server verwenden sollte. Der Asset Server ist für mich wirklich keine Option.

609voto

S.Richmond Punkte 11129

Der folgende Auszug stammt aus meinem persönlichen Blog.

Git mit 3D-Spielen verwenden

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

Git funktioniert grundsätzlich gut mit 3D-Spielen. Der Hauptnachteil hierbei ist jedoch, dass das Versionieren von großen (>5 MB) Mediendateien langfristig ein Problem darstellen kann, wenn Ihr Commit-Verlauf aufgebläht wird. Wir haben dieses potenzielle Problem in unseren Projekten gelöst, indem wir das binäre Asset nur versioniert haben, wenn es als fertig betrachtet wird. Unsere 3D-Künstler verwenden Dropbox sowohl aus dem oben genannten Grund als auch, weil es viel schneller und einfacher ist (nicht viele Künstler werden aktiv Git nutzen wollen!).

Git-Workflow

Ihr Git-Workflow ist etwas, das Sie selbst anhand Ihrer eigenen Erfahrungen als Team und Ihrer Arbeitsweise entscheiden müssen. Allerdings empfehle ich dringend die angemessen benannte Git-Flow-Methodik, wie sie vom ursprünglichen Autor hier beschrieben wurde.

Ich werde hier nicht allzu sehr ins Detail gehen, wie die Methodik funktioniert, da der Autor sie perfekt und auch recht kurz beschreibt, sodass es leicht zu verstehen ist. Ich habe sie eine Weile lang mit meinem Team verwendet, und es ist der beste Workflow, den wir bisher ausprobiert haben.

Git GUI-Client-Anwendung

Das ist wirklich eine persönliche Präferenz, da es viele Optionen in Bezug auf Git-GUI gibt oder ob man überhaupt eine GUI verwenden möchte. Aber ich würde die kostenlose SourceTree-Anwendung empfehlen, da sie perfekt mit der Git-Flow-Erweiterung funktioniert. Lesen Sie das SourceTree-Tutorial hier, um die Git-Flow-Methodik in ihrer Anwendung zu implementieren.

Unity3D Ignore-Ordner

Für eine aktuelle Version besuchen Sie die von Github gepflegte Unity.gitignore-Datei hier ohne OS-spezifische Angaben.

# =============== #
# Von Unity generiert #
# =============== #
Temp/
Library/

# ===================================== #
# Von Visual Studio / MonoDevelop generiert #
# ===================================== #
ExportedObj/
obj/
*.svd
*.userprefs
/*.csproj
*.pidb
*.suo
/*.sln
*.user
*.unityproj
*.booproj

# ============ #
# Von OS generiert #
# ============ #
.DS_Store
.DS_Store?
._*
.Spotlight-V100
.Trashes
ehthumbs.db
Thumbs.db

Unity3D-Einstellungen

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

  1. (Überspringen Sie diesen Schritt bei v4.5 und höher) Aktivieren Sie die External-Option in Unity-Einstellungen Pakete Repository.
  2. Öffnen Sie das Bearbeiten-Menü und wählen Sie Projekteinstellungen Editor:
    1. Wechseln Sie den Version Control Mode zu Sichtbare Metadaten.
    2. Wechseln Sie den Asset Serialization Mode zu Force Text.
  3. Speichern Sie die Szene und das Projekt aus dem Datei-Menü.

Möchten Sie Ihr vorhandenes Repository zu LFS migrieren?

Schauen Sie sich meinen Blogbeitrag mit Schritten hier an.

Zusätzliche Konfiguration

Eines der wenigen Hauptärgernisse bei der Verwendung von Git mit Unity3D-Projekten ist, dass Git sich nicht um Verzeichnisse kümmert und gerne leere Verzeichnisse zurücklässt, nachdem Dateien daraus entfernt wurden. Unity3D erstellt *.meta-Dateien für diese Verzeichnisse und kann zu einem Kampf zwischen Teammitgliedern führen, wenn Git-Commits diese Meta-Dateien immer wieder hinzufügen und entfernen.

Fügen Sie diesen Git-Post-Merge-Hook in den /.git/hooks/-Ordner für Repositories mit Unity3D-Projekten hinzu. Nach einem Git-Pull/Merge wird überprüft, welche Dateien entfernt wurden, ob das Verzeichnis, in dem sie sich befanden, leer ist und falls ja, wird es gelöscht.

69voto

zasadnyy Punkte 2057

In Unity 4.3 musstest du die Option Extern in den Einstellungen aktivieren, aber seit Unity 4.5 haben sie diese Option fallen gelassen, daher sieht der vollständige Einrichtungsprozess wie folgt aus:

  1. Wechsle zu Sichtbare Metadateien in Editor Projekt Einstellungen Editor Versionskontrollmodus
  2. Wechsle zu Force Text in Editor Projekt Einstellungen Editor Asset Serialization-Modus
  3. Speichere Szene und Projekt im Datei Menü ab

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

# =============== #
# Von Unity generiert #
# =============== #
Temp/
Library/

# ===================================== #
# Von Visual Studio / MonoDevelop generiert #
# ===================================== #
ExportedObj/
obj/
*.svd
*.userprefs
/*.csproj
*.pidb
*.suo
/*.sln
*.user
*.unityproj
*.booproj

# ============ #
# Von Betriebssystemen generiert #
# ============ #
.DS_Store
.DS_Store?
._*
.Spotlight-V100
.Trashes
ehthumbs.db
Thumbs.db

Beachte, dass die einzigen Ordner, die unter Versionskontrolle gehalten werden müssen, Assets und ProjectSettings sind.

Weitere Informationen zum Hosten eines Unity-Projekts unter Versionskontrolle findest du in diesem Beitrag.

37voto

NabeelSaleem Punkte 869

Was ist GIT?

Git ist ein kostenloses und Open-Source-Verteiltes Versionskontrollsystem (SCM), das von Linus Torvalds im Jahr 2005 entwickelt wurde (Gründer des Linux-Betriebssystems). Es wurde geschaffen, um alles von kleinen bis großen Projekten mit Geschwindigkeit und Effizienz zu kontrollieren. Führende Unternehmen wie Google, Facebook und Microsoft verwenden GIT täglich.

Wenn Sie mehr über GIT erfahren möchten, überprüfen Sie dieses schnelle Tutorial,

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 für Mac/Windows

Für die GIT-GUI-Clientanwendung empfehle ich Ihnen, zu Github.com zu gehen,

GitHub ist der Ort, um Code mit Freunden, Kollegen, Mitschülern und völlig Fremden zu teilen. Über fünf Millionen Menschen nutzen GitHub, um gemeinsam erstaunliche Dinge zu bauen.

Unity3d-Einstellungen

Sie müssen diese Einstellungen vornehmen

Wechseln Sie zu sichtbaren Metadateien unter Bearbeiten Projekt Einstellungen Editor Versionskontrollmodus.

Bildbeschreibung hier eingeben

Aktivieren Sie die externe Option in Unity Einstellungen Pakete Repository

Bildbeschreibung hier eingeben

Wechseln Sie zu Text erzwingen unter Bearbeiten Projekt Einstellungen Editor Asset Serialisierungsmodus.

Bildbeschreibung hier eingeben

Quelle: Mit Git verwenden Sie die Quellsteuerung für 3D-Spiele

30voto

rygo6 Punkte 1901

Um alles Gesagte zu ergänzen, ist es auch ideal, git lfs mit Unity zu verwenden. Ich benutze das seit seiner Einführung und hatte keine Probleme damit.

Sie sollten diese .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 aktuelle Dateiliste. Wenn Sie zusätzliche binäre Dateien verwenden, die nicht aufgeführt sind, fügen Sie diese hinzu.

I habe auch Dateien konfiguriert, um yamlmerge zu verwenden, das müssen Sie einrichten. Hier finden Sie Informationen dazu: http://docs.unity3d.com/Manual/SmartMerge.html

15voto

Get Off My Lawn Punkte 30522

Ich dachte, ich könnte eine einfachere .gitignore für alle posten, die interessiert sind:

# Alles ignorieren
/*

# Außer diesen
!/.gitignore
!/Assets
!/Packages
!/ProjectSettings

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X