Comment utiliser Git pour le contrôle de source Unity3D?

499

Quelles sont les meilleures pratiques pour utiliser le contrôle de source Git avec Unity 3D, en particulier pour gérer la nature binaire des projets Unity 3D? Veuillez décrire le flux de travail, quels chemins seraient inclus dans .gitignore, quels paramètres devraient être définis dans Unity et / ou le projet, et tout autre élément spécial à noter.

Remarque: je me rends compte que l'utilisation d'Asset Server est la méthode recommandée par Unity, mais je voudrais utiliser Git pour diverses raisons. Veuillez ne pas répondre à cette question ou affirmer que je devrais simplement utiliser le serveur d'actifs. Le serveur d'actifs n'est vraiment pas une option pour moi.

PressingOnAlways
la source
3
"juste utiliser svn" indépendamment des arguments inutiles de git V svn, git n'est tout simplement pas pour les gros fichiers binaires. les projets d'unité sont des films (et divers fichiers binaires énormes - textures, etc.), avec une poignée de lignes de code. utiliseriez-vous git pour stocker votre collection de films? svn est au moins raisonnable.
Fattie
1
La solution la plus simple consiste à exclure simplement tous les dossiers binaires avec gitignore, et à n'utiliser git que pour vos fichiers de code réels, et peut-être vos fichiers de ressources. Tous les binaires n'ont pas besoin d'être inclus car chaque membre de l'équipe peut les compiler pour eux-mêmes?
Kokodoko
@Kokodoko Artists ne peut pas compiler ses propres exécutables.
Crashworks
Même si cela était vrai, ils peuvent toujours pousser de nouvelles ressources d'image vers git ... afin que les développeurs puissent compiler avec la nouvelle illustration ...
Kokodoko
@Kokodoko Cela signifie qu'un artiste devra attendre qu'un développeur voie le commit et fasse un build pour voir ses changements dans le jeu. C'est un temps d'itération très long.
Crashworks

Réponses:

523

Ce qui suit est un extrait de mon blog personnel .

Utiliser Git avec des jeux 3D

Mise à jour d'octobre 2015: GitHub a depuis publié un plugin pour Git appelé Git LFS qui traite directement le problème ci-dessous. Vous pouvez désormais facilement et efficacement mettre à jour de gros fichiers binaires!

Git peut très bien fonctionner avec des jeux 3D prêts à l'emploi. Cependant, la principale mise en garde ici est que la gestion des versions des fichiers multimédias volumineux (> 5 Mo) peut être un problème à long terme lorsque votre historique de validation est trop lourd. Nous avons résolu ce problème potentiel dans nos projets en ne versionnant l'actif binaire que lorsqu'il est considéré comme final. Nos artistes 3D utilisent Dropbox pour travailler sur les ressources WIP, à la fois pour la raison ci-dessus et parce que c'est beaucoup plus rapide et plus simple (peu d'artistes voudront activement utiliser Git!).

Flux de travail Git

Votre flux de travail Git est quelque chose que vous devez décider vous-même compte tenu de vos propres expériences en équipe et de la façon dont vous travaillez ensemble. Toutefois. Je recommanderais fortement la méthodologie Git Flow correctement nommée telle que décrite par l'auteur original ici .

Je n'entrerai pas dans les détails ici sur le fonctionnement de la méthodologie telle que l'auteur la décrit parfaitement et en peu de mots aussi, donc c'est facile à comprendre. J'utilise avec mon équipe depuis un certain temps maintenant, et c'est le meilleur flux de travail que nous ayons essayé jusqu'à présent.

Application cliente Git GUI

C'est vraiment une préférence personnelle ici car il existe de nombreuses options en termes de Git GUI ou s'il faut utiliser une interface graphique. Mais je voudrais suggérer l' application gratuite SourceTree car elle se branche parfaitement avec l'extension Git Flow. Lis le tutoriel SourceTree ici sur l'implémentation de la méthodologie Git Flow dans leur application.

Unity3D Ignore Folders

Pour un contrôle de version à jour, Github a conservé le fichier Unity.gitignore sans spécification du système d'exploitation.

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

Paramètres Unity3D

Pour les versions de Unity 3D v4.3 et supérieures:

  1. (Ignorez cette étape à partir de la v4.5) Activez l' Externaloption dansUnity → Preferences → Packages → Repository .
  2. Ouvrez le Editmenu et choisissez Project Settings → Editor:
    1. Passez Version Control Modeà Visible Meta Files.
    2. Passez Asset Serialization Modeà Force Text.
  3. Enregistrez la scène et le projet dans le Filemenu.

Vous souhaitez migrer votre référentiel existant vers LFS?

Consultez mon article de blog pour savoir comment le faire ici .

Configuration supplémentaire

L'un des rares désagréments majeurs liés à l'utilisation de Git avec des projets Unity3D est que Git ne se soucie pas des répertoires et laissera volontiers des répertoires vides après avoir supprimé des fichiers. Unity3D crée des fichiers * .meta pour ces répertoires et peut provoquer un peu de bataille entre les membres de l'équipe lorsque Git s'engage à continuer d'ajouter et de supprimer ces méta-fichiers.

Ajoutez ce hook post-fusion Git au /.git/hooks/dossier des référentiels contenant des projets Unity3D. Après tout pull / merge Git, il va regarder quels fichiers ont été supprimés, vérifier si le répertoire dans lequel il existait est vide, et si oui, le supprimer.

S.Richmond
la source
2
Mentionner le flux de travail git est bien, mais je devrais peut-être clarifier dans ma question que je pose sur les flux de travail particulièrement spécifiques à l'unité 3D. Comme vous le savez peut-être, les projets d'unité reposent fortement sur des fichiers binaires. Y a-t-il des considérations spéciales pour y faire face? Certaines recommandations que j'ai trouvées lors de la recherche sur ce sujet consistaient à utiliser un flux de travail qui évitait autant que possible les fusions. Peut-être que vous ne partagez pas ce sentiment, mais ma question est plus spécifique concernant les problèmes spécifiques à Unity3d plutôt que les préférences générales de workflow.
PressingOnAlways
3
Nous utilisons une annexe git pour gérer notre grand contenu binaire. Le support de Windows n'est pas génial mais il s'améliore. Cela n'est utile que si vous ne vous souciez pas du suivi des tours dans les gros fichiers binaires.
Jerdak
2
Une mise à jour - nous avons essayé votre configuration et cela a plutôt bien fonctionné, mais nous voulions que nos ressources soient automatiquement synchronisées. Nous utilisons maintenant sugarsync pour synchroniser sélectivement le dossier des ressources binaires. Dropbox synchroniserait uniquement le dossier dropbox, mais avec la synchronisation de sucre, vous pouvez synchroniser arbitrairement des dossiers n'importe où sur le disque dur, ce qui est extrêmement utile. Nous avons dû modifier un peu la structure de notre répertoire Assets pour définir un sous-dossier pour ces gros fichiers binaires, mais jusqu'à présent, cela a très bien fonctionné. Nous venons .gitignore ce dossier et autorisons la synchronisation de sucre pour le garder synchronisé.
PressingOnAlways
2
Pourquoi le choix d'aller avec Hidden Meta Files?
Slipp D. Thompson,
2
Correction de ma faute de copie et de collage - Oui, il devrait s'agir de Meta Files visibles.
S.Richmond
60

Dans Unity 4.3, vous deviez également activer l'option externe à partir des préférences, mais depuis Unity 4.5, ils ont abandonné l'option pour cela, donc le processus de configuration complet ressemble à:

  1. Basculer vers Visible Meta Files inEditor → Project Settings → Editor → Version Control Mode
  2. Basculer vers Force Text inEditor → Project Settings → Editor → Asset Serialization Mode
  3. Enregistrer la scène et le projet depuis File menu

Notre équipe utilise également un .gitignorefichier un peu plus étendu :

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

Notez que les seuls dossiers que vous devez garder sous contrôle de code source sont Assets etProjectSettings .

Vous trouverez plus d'informations sur la façon de garder Unity Project sous contrôle de source dans cet article .

zasadnyy
la source
Cela pourrait être mieux si vous modifiez ma réponse en haut pour inclure ces nouvelles options. :)
S.Richmond
6
Pourquoi le choix d'aller avec Hidden Meta Files?
Slipp D. Thompson,
Le premier point est clairement faux. Il n'y a pas d'unité → Préférences → Packages → Référentiel
Agostino
1
selon docs.unity3d.com/Manual/… il devrait s'agir de Meta Files visibles
Markus
1
Fonctionne très bien pour mon équipe. Merci beaucoup.
eifersucht
34

Qu'est-ce que GIT?

Git est un système de contrôle de version distribué (SCM) gratuit et open source développé par Linus Torvalds en 2005 (fondateur de Linux OS). Il est créé pour contrôler tout ce qui se passe de petits à grands projets avec rapidité et efficacité. Des entreprises de premier plan comme Google, Facebook et Microsoft utilisent GIT au quotidien.

Si vous voulez en savoir plus sur GIT, consultez ce tutoriel rapide ,

Tout d'abord, assurez-vous que votre environnement Git est configuré.Vous devez configurer à la fois votre environnement local et un référentiel Git (je préfère Github.com).

Application client GIT Mac / Windows

Pour l'application client GIT gui, je vous ai recommandé d'aller avec Github.com,

GitHub est l'endroit idéal pour partager du code avec des amis, des collègues, des camarades de classe et de parfaits inconnus. Plus de cinq millions de personnes utilisent GitHub pour construire ensemble des choses incroyables.

Paramètres Unity3d

Vous devez effectuer ces réglages

Basculez vers les méta-fichiers visibles dans Édition → Paramètres du projet → Éditeur → Mode de contrôle de version.

entrez la description de l'image ici

Activer l'option externe dans Unity → Préférences → Packages → Référentiel

entrez la description de l'image ici

Passez à Forcer le texte dans Édition → Paramètres du projet → Éditeur → Mode de sérialisation des ressources.

entrez la description de l'image ici

Source: Utilisation de Git avec le contrôle de source des jeux 3D

NabeelSaleem
la source
6
+1 Cette réponse est déjà écrite ci-dessus mais la réponse de @NabeelSaleem m'a aidé avec les images qu'il a fournies et un guide clair :) merci
aflatoon
3
Je ne trouve pas Preferences > Packagesdans Unity 5.x Normal? ty
Yves Lange
5
@NabeelSaleem oui. En fait, cette étape dans Unity 5.x n'est pas nécessaire. ty
Yves Lange
22

Pour ajouter à tout ce qui est indiqué, il est également idéal d'utiliser git lfs avec Unity. Je l'utilise depuis sa sortie et je n'ai eu aucun problème avec.

Vous voudrez l'ajouter à .gitattributescôté de votre .gitignorefichier

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

C'est ma liste de dossiers roulants. Si vous utilisez des fichiers binaires supplémentaires non répertoriés, ajoutez-les.

J'ai également des fichiers configurés pour utiliser yamlmerge, vous devez le configurer. Vous pouvez en lire plus ici: http://docs.unity3d.com/Manual/SmartMerge.html

rygo6
la source
11

Nous avons maintenant une intégration transparente à l'unité avec l'extension Github to Unity ... https://unity.github.com/

La nouvelle extension GitHub pour Unity apporte le flux de travail GitHub et plus à Unity, en prenant en charge les fichiers volumineux avec Git LFS et le verrouillage de fichiers.

Au moment de la rédaction, le projet est en alpha, mais est toujours utilisable pour des projets personnels.

Bhupen
la source
avez-vous essayé cela?
Nabeel K
11

J'ai pensé que je pourrais poster un texte plus simple .gitignorepour toute personne intéressée:

# Ignore Everything
/*

# Except for these:
!/.gitignore
!/Assets
!/Packages
!/ProjectSettings
Descendre ma pelouse
la source
7
Encore une fois, toutes ces réponses sont assez obsolètes sur cette page. si pour une raison quelconque vous devez utiliser git avec Unity, github.com/github/gitignore/blob/master/Unity.gitignore
Fattie
Petit, simple et entièrement compatible avec toutes les versions: je trouve que ce script fonctionne le mieux, même pour Unity 2017 et 2018 qui ont récemment changé la structure de leur projet ( UnityPackageManager/et Packages/).
Isaak Eriksson
8

Les principales choses à retenir lors de l'utilisation de git pour le contrôle de version du code source de l'unité-3d:

(A) NE PAS archiver le dossier Bibliothèque . J'ai fait cette erreur plusieurs fois dans le passé et j'en ai souffert! Supprimez OU déplacez le dossier de la bibliothèque avant d'ajouter votre projet / vos fichiers dans git.

(B) Utilisez "Meta Files visibles" - pour les dernières versions de l'unité - 5.3.4 et au-dessus, cela se produit par défaut. Pour certaines des versions antérieures, vous devez modifier les paramètres sous: Edition-> Paramètres du projet-> Contrôle de version

(C) Utilisez un fichier .gitignore pour Unity - pour vous assurer que l'intégrité est maintenue et que les fichiers ne sont pas inutilement ajoutés - si sur android / tizen - ajoutez des règles pour exclure les fichiers APK et TPK d'être ajoutés au référentiel. Recherchez un fichier .gitignore pour l'unité dans Google ou utilisez ce modèle .gitignore pour Unity fourni par GitHub: https://github.com/github/gitignore/blob/master/Unity.gitignore

(D) Assurez-vous que le fichier .gitignore est ajouté au référentiel en tant que premier fichier ajouté - parce que dans le passé, personnellement, j'ai manqué d'ajouter le fichier .gitignore. Renseignez-vous avec le recul sur la raison pour laquelle cela s'est produit, mais de nos jours, je copie et j'ajoute simplement le fichier .gitignore comme première étape de la configuration du référentiel.

Donc ... pour préparer un projet Unity pour git, procédez comme suit:

(1) Allez dans le dossier du projet

(2) Tapez git init.

(3) Copiez le fichier .gitignore: Sous MacOS: cp ~ / Downloads / .gitignore Sous Windows: copiez c: \ Users [votre nom d'utilisateur] \ Downloads.gitignore.

(4) git add .gitignore

(5) git add *

J'espère que cela aide ... tout le meilleur!

Naligator
la source
6

Edit -> Project Settings -> Editor

Définissez le contrôle de version sur des méta-fichiers. Définissez la sérialisation des actifs pour forcer le texte.

Je pense que c'est ce que tu veux.

afpro
la source
1
Et comment configurer la fusion YAML?
shinzou
6

Vous pouvez utiliser Github pour Unity , une extension Unity qui apporte le flux de travail git dans l'interface utilisateur d'Unity.

Github pour Unity vient de publier la version 1.0 de l'extension.

Kyle B
la source
5

Seuls les actifs et les paramètres du projet dossiers doivent être sous contrôle de version git.

Vous pouvez faire un gitignore comme ça.

[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
la source
3

Unity fournit également son propre contrôle de version source. avant Unity5, c'était UnitAsset Server, mais maintenant il est déprécié. et lancer un nouveau système de contrôle SVN appelé Unity Collaborate.Mais le principal problème lié à l'unité et à n'importe quel SVN est la validation et la fusion de la scène. mais Non de svn nous donne le moyen de résoudre ce genre de conflits ou de fusionner la scène. dépend donc de vous quel SVN vous connaissez. J'utilise l'outil SmartSVN sur Mac. et tortue sur les fenêtres.

entrez la description de l'image ici

Shahbaz Ali
la source
1

Ajout juste sur le sujet de Gitignore. La méthode recommandée ignore uniquement Library et Temp, si sa racine wihtin de votre projet git. si vous êtes comme moi et avez parfois besoin d'un projet d'unité pour faire partie du repo, pas de l'ensemble du repo, les cordes correctes dans gitignore seraient:

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

Je voulais ajouter un flux de travail très simple de quelqu'un qui a été frustré par Git dans le passé. Il existe plusieurs façons d'utiliser git, probablement les plus courantes pour l'unité sont GitHub Desktop, Git Bash et GitHub Unity

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

Essentiellement, ils font tous la même chose, mais son choix d'utilisateur. Vous pouvez avoir git pour la configuration de fichiers volumineux qui permet un stockage de fichiers volumineux gratuit de 1 Go avec un stockage supplémentaire disponible dans des packs de données pour 4 $ / mois pour 50 Go, et cela vous permettra de pousser des fichiers> 100 Mo vers des référentiels distants (il stocke les fichiers réels sur un serveur et dans votre référentiel un pointeur)

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

Si vous ne voulez pas configurer lfs pour une raison quelconque, vous pouvez analyser vos projets pour les fichiers> 128 Mo dans Windows en tapant size: large dans le répertoire où vous avez votre projet. Cela peut être pratique pour rechercher des fichiers volumineux, bien que certains fichiers entre 100 Mo et 128 Mo puissent être manqués.

entrez la description de l'image ici

Le format général de git bash est

git add. (ajoute des fichiers à valider)

git commit -m 'message' (valide les fichiers avec un message, ils sont toujours sur votre PC et non dans le référentiel distant, en gros ils ont été 'versionnés' comme un nouveau commit)

git push (envoyer des fichiers au référentiel)

L'inconvénient de git bash pour les projets d'unité est que s'il y a un fichier> 100 Mo, vous n'obtiendrez pas d'erreur jusqu'à ce que vous poussiez. Vous devez ensuite annuler votre commit en réinitialisant votre tête au commit précédent. Une sorte de tracas, surtout si vous êtes nouveau avec git bash.

L'avantage de GitHub Desktop, AVANT de valider des fichiers avec 100 Mo, il vous donnera un message d'erreur contextuel. Vous pouvez ensuite réduire ces fichiers ou les ajouter à un fichier .gitignore.

Pour utiliser un fichier .gitignore, créez un fichier appelé .gitignore dans votre répertoire racine de référentiel local. Ajoutez simplement les fichiers une ligne à la fois que vous souhaitez supprimer. Les SharedAssets et autres fichiers de dossiers non-Asset peuvent généralement être omis et se repeupler automatiquement dans l'éditeur (les packages peuvent être réimportés, etc.). Vous pouvez également utiliser des caractères génériques pour exclure les types de fichiers.

Si d'autres personnes utilisent votre référentiel GitHub et que vous souhaitez cloner ou extraire, vous disposez également de ces options sur le bureau GitHub ou Git bash.

Je n'ai pas beaucoup parlé du paquet Unity GitHub où vous pouvez utiliser GitHub dans l'éditeur parce que personnellement, je n'ai pas trouvé l'interface très utile, et je ne pense pas que dans l'ensemble cela va aider quiconque à se familiariser avec git, mais c'est juste mon préférence.

vasmos
la source