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

Quelles sont les meilleures pratiques d’utilisation du contrôle de source Git avec Unity 3D, en particulier en ce qui concerne la nature binary des projets Unity 3D? Veuillez décrire le stream de travail, les chemins à inclure dans .gitignore, les parameters à définir dans Unity et / ou le projet, ainsi que tout autre élément spécial à noter.

Remarque: je me rends compte que l’utilisation du serveur Asset est la méthode recommandée par Unity, mais j’aimerais utiliser Git pour diverses raisons. S’il vous plaît pas de réponses qui disent ou soutiennent que je devrais juste utiliser le serveur d’actifs. Le serveur d’actifs n’est vraiment pas une option pour moi.

Ce qui suit est un extrait de mon blog personnel .

Utiliser Git avec des jeux 3D

Mise à jour Oct 2015: GitHub a depuis publié un plugin pour Git appelé Git LFS qui traite directement le problème ci-dessous. Vous pouvez maintenant facilement et efficacement version de gros fichiers binarys!

Git peut fonctionner correctement avec des jeux 3D prêts à l’emploi. Cependant, le principal inconvénient est que la gestion des fichiers multimédias volumineux (> 5 Mo) peut être un problème à long terme, car l’historique de vos validations s’engouffre. Nous avons résolu ce problème potentiel dans nos projets en ne contrôlant que l’actif binary lorsqu’il est considéré comme final. Nos artistes 3D utilisent Dropbox pour travailler sur les actifs WIP , à la fois pour la raison ci-dessus et parce que c’est beaucoup plus rapide et simple (peu d’artistes voudront utiliser activement Git!).

Workflow Git

Votre stream de production Git est très important pour vous-même, compte tenu de votre expérience en équipe et de la manière dont vous travaillez ensemble. Toutefois. Je recommande fortement la méthodologie Git Flow , décrite de manière appropriée par l’auteur original ici .

Je n’entrerai pas trop dans le détail sur la façon dont la méthodologie fonctionne, car l’auteur la décrit parfaitement et en quelques mots, ce qui facilite la tâche. J’ai utilisé avec mon équipe pendant un certain temps maintenant, et c’est le meilleur workflow que nous avons essayé jusqu’à présent.

Application client Git GUI

Ceci est vraiment une préférence personnelle, car il existe plusieurs options en termes d’interface graphique de Git ou d’utilisation d’une interface graphique. Mais je voudrais suggérer l’ application gratuite de SourceTree car elle se twig parfaitement avec l’extension Git Flow. Lisez le didacticiel de SourceTree sur l’implémentation de la méthodologie Git Flow dans leur application.

Unity3D Ignorer les dossiers

Pour une vérification de version à jour, Github a conservé le fichier Unity.gitignore sans les spécificités 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 dans la version 4.5 et ultérieure) Activer l’option External dans Unity → Preferences → Packages → Repository .
  2. Ouvrez le menu Edit et sélectionnez Project Settings → Editor :
    1. Basculer Version Control Mode vers des Visible Meta Files .
    2. Basculer le Asset Serialization Mode en Force Text .
  3. Enregistrez la scène et le projet dans le menu File .

Voulez-vous migrer votre référentiel existant vers LFS?

Consultez mon blog pour connaître les étapes à suivre ici .

Configuration supplémentaire

L’un des rares inconvénients majeurs liés à l’utilisation de Git avec les projets Unity3D est que Git ne se soucie pas des répertoires et laissera volontiers des répertoires vides après avoir supprimé les fichiers. Unity3D crée des fichiers * .meta pour ces répertoires et peut causer un peu de bataille entre les membres de l’équipe lorsque Git valide continuellement l’ajout et la suppression de ces méta-fichiers.

Ajoutez ce hook post-fusion Git au dossier /.git/hooks/ pour les référentiels contenant des projets Unity3D. Après chaque extraction / fusion de Git, il examinera quels fichiers ont été supprimés, vérifie si le répertoire dans lequel il se trouve est vide et, le cas échéant, le supprime.

Dans Unity 4.3, vous deviez également activer l’option Externe à partir des préférences, mais depuis Unity 4.5, l’option a été supprimée, ce qui fait que le processus de configuration complet ressemble à ceci:

  1. Basculer vers les Visible Meta Files dans l’ Editor → Project Settings → Editor → Version Control Mode
  2. Passer à la Force Text dans l’ Editor → Project Settings → Editor → Asset Serialization Mode
  3. Enregistrer la scène et le projet dans le menu File

Notre équipe utilise également un fichier .gitignore 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 source sont Assets et ProjectSettings .

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

Qu’est ce que GIT?

Git est un système de contrôle de version dissortingbué (SCM) gratuit et open source développé par Linus Torvalds en 2005 (fondateur du système d’exploitation Linux). Il est créé pour contrôler tous les projets de petite à grande taille avec rapidité et efficacité. Des entresockets de premier plan comme Google, Facebook et Microsoft utilisent GIT tous les jours.

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

Assurez-vous tout d’abord que votre environnement Git est configuré. Vous devez configurer votre environnement local et un référentiel Git (je préfère Github.com).

Application client GIT Mac / Windows

Pour l’application cliente 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 des inconnus complets. Plus de cinq millions de personnes utilisent GitHub pour construire des choses étonnantes ensemble.

Paramètres Unity3d

Vous devez faire ces réglages

Basculez vers les métadonnées visibles dans Modifier → Paramètres du projet → Editeur → Mode de contrôle de version.

entrer la description de l'image ici

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

entrer la description de l'image ici

Basculer vers le texte forcé dans Edition → Paramètres du projet → Editeur → Mode de sérialisation des actifs.

entrer la description de l'image ici

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

Pour append à tout ce qui est indiqué, il est également idéal d’utiliser git lfs avec Unity. Je l’utilise depuis qu’il est sorti et il n’a eu aucun problème.

Vous voudrez append ce .gitatsortingbutes à côté de votre fichier .gitignore

 *.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 binarys supplémentaires et non des listes, ajoutez-les.

J’ai aussi des fichiers configurés pour utiliser yamlmerge, vous devez le configurer. Vous pouvez lire à ce sujet ici: http://docs.unity3d.com/Manual/SmartMerge.html

Je pensais que je pourrais publier un .gitignore plus simple pour toute personne intéressée:

 # Ignore Everything /* # Except for these: !/.gitignore !/Assets !/ProjectSettings 

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

La nouvelle extension GitHub for Unity apporte le stream de travail GitHub et bien plus encore à Unity, fournissant un support pour les fichiers volumineux avec Git LFS et le locking des fichiers.

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

Edit -> Project Settings -> Editor

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

Je pense que c’est ce que vous voulez.

Seuls les dossiers Assets et ProjectSettings doivent être contrôlés par git.

Vous pouvez créer un gitignore comme celui-ci.

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

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

(A) NE PAS enregistrer dans le dossier Library . J’ai commis cette erreur plusieurs fois par le passé et en ai souffert! Supprimer OU déplacer le dossier de la bibliothèque avant d’append vos projets / fichiers dans git.

(B) Utilisez “Meta Files Visible” – pour les versions les plus récentes de l’unité – 5.3.4 et ci-dessus, cela se produit par défaut. Pour certaines des versions antérieures, vous devez modifier les parameters sous: Edit-> Project Settings-> Version Control

(C) Utilisez un fichier .gitignore pour Unity pour vous assurer que la cohérence est maintenue et que les fichiers ne sont pas ajoutés inutilement – si sur android / tizen – ajoutez des règles pour exclure les fichiers APK et TPK du référentiel. Google pour un fichier .gitignore pour l’unité 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é, car j’ai personnellement manqué d’append un fichier .gitignore. Rétrospectivement, réfléchissez à la raison pour laquelle cela s’est produit – mais de nos jours, je ne fais que copier et append le fichier .gitignore comme première étape de la configuration du référentiel.

Alors … pour préparer un projet Unity pour git, procédez comme suit:

(1) Aller au dossier du projet

(2) Tapez git init.

(3) Copiez le fichier .gitignore: Sous MacOS: cp ~ / Downloads / .gitignore Sous Windows: copiez c: \ Users [nomutilisateur] \ Downloads.gitignore.

(4) git add .gitignore

(5) git add *

J’espère que ça aide … tout le meilleur!

Vous pouvez utiliser Github for Unity , une extension Unity qui introduit le stream de production git dans l’interface utilisateur d’Unity.

Github for Unity vient de sortir la version 1.0 de l’extension.

Unity fournit également son propre contrôle de version de source. avant unity5, c’était unityAsset Server, mais maintenant il est déprécié. et lancer un nouveau système de contrôle SVN appelé unité collaborate.bien que le problème principal en utilisant l’unité et n’importe quel SVN commet et fusionne la scène. mais non de svn nous permet de résoudre ce genre de conflits ou de fusionner des scènes. alors dépendez de vous que SVN vous connaissez. J’utilise l’outil SmartSVN sur Mac. et tortue sur les fenêtres.

entrer la description de l'image ici

Je préférerais plutôt que vous utilisiez BitBucket, car il n’est pas public et il existe un tutoriel officiel par Unity sur Bitbucket.

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

J’espère que cela t’aides.

Il suffit d’append sur le sujet de Gitignore. La méthode recommandée ignore uniquement Library et Temp, si elle est la racine de votre projet git. si vous êtes comme moi et que vous avez parfois besoin d’un projet d’unité pour faire partie du repo, et non de l’ensemble du repo, les bonnes chaînes de gitignore seraient:

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