Ignorer les fichiers de méta de dossier sur le contrôle de version

Unity crée et supprime les fichiers méta pour les dossiers du dossier Asset.

Cela peut créer une situation agaçante lors de l’utilisation du contrôle de version (que vous pouvez ignorer et passer aux questions): quelqu’un crée un dossier de fichiers qui sera ignoré mais oubliera d’ignorer le fichier méta du dossier. Unity crée le méta-fichier et la personne ajoute le méta au contrôle de version. Une autre personne reçoit les modifications et, comme il ne possède pas le dossier, son unité supprime le fichier méta et supprime le fichier méta du contrôle de version. Tout le monde dans l’équipe ne comprend pas cela, alors le processus se perpétue en boucle par rapport à l’enfer.

Étonnamment, cela se produit tout le temps. Donc, deux questions:

  1. Est-ce important de mettre les fichiers de méta des dossiers de versions?
  2. Existe-t-il un moyen d’ignorer automatiquement les méta-fichiers des dossiers, en particulier sur git ou mercurial?

Les documents Unity disent:

Lors de la création de nouveaux actifs, assurez-vous que le fichier lui-même et le fichier .meta associé sont ajoutés au contrôle de version.

Pour moi, c’est une raison suffisante pour les placer sous contrôle de version. Je vois deux approches pour résoudre le problème:

  • Organisation: Configurez une convention de dénomination pour les dossiers locaux, en commençant par “_”. Mais nous soaps tous que cela ne fonctionnera pas 😉
  • Installez un hook de pré-validation côté client sur toutes les machines. Je ne l’ai pas encore fait mais cela semble prometteur.

Je viens de jouer avec les différentes commandes git, les suivantes pourraient être utiles: Le script git hook vérifie d’abord si .gitignore a changé de:

 git diff-index --cached --name-only HEAD | grep ".gitignore" 

Imprimez les noms de répertoire de toutes les nouvelles lignes ajoutées dans .gitignore si elles se trouvent sous le dossier Assets:

 git diff --cached --word-diff=plain .gitignore | grep -o -e "{+\/.*\/Assets\/.*+}" | cut -d + -f 2 

Mettre à jour

Je viens d’écrire un tel hook de pre-commit 🙂 Voir le repository GitHub git-pre-commit-hook-unity-assets pour le code et mon blog à ce sujet pour plus de détails.

pour inclure les méta-fichiers avec les actifs, ajoutez simplement ce qui suit après vos exclusions:

 !*.*.meta 

Voici un exemple de mon .gitignore:

 # Ignore the following files # -------------------------- # Unity3D specific # **/Library/* **/Temp/* **/*.csproj **/*.unityproj **/*.sln **/*.userprefs **/*.pidb # include meta files !*.*.meta 

Je place cela dans le dossier avec la structure de repository git, donc ma structure de projet ressemblerait à:

 root folder / - Unity Project/ - .gitignore - .git/ - ProjectFolder/ - {all project related data} 

J’espère que cela pourra aider.