Ignorar files meta de carpetas en el control de versiones

Unity crea y elimina metafiles para las carpetas dentro de la carpeta Asset.

Eso puede crear una situación molesta al usar el control de versiones (que puede omitir y pasar a las preguntas): alguien crea una carpeta de files que serán ignorados pero se olvida de ignorar el meta file de la carpeta. Unity crea el meta file y la persona agrega el control meta a la versión. Otra persona obtiene los sets de cambios y, como no tiene la carpeta, su Unidad elimina el metafile y elimina el metafile del control de versiones. No todos en el equipo entienden esto, por lo que el process se perpetúa en un ciclo infernal.

Sorprendentemente, esto sucede todo el time. Entonces, dos preguntas:

  1. ¿Es importante copyr los meta files de la versión?
  2. ¿Hay alguna forma de ignorar automáticamente los files meta de las carpetas, particularmente en git o mercurial?

Los documentos de Unity dicen:

Al crear nuevos activos, asegúrese de que tanto el activo como el file .meta asociado se agreguen al control de la versión.

Para mí, esto es motivo suficiente para ponerlos bajo control de versiones. Veo dos enfoques para resolver el problema:

  • Organizacional: configure una convención de nomenclatura para carpetas locales, como comenzar con "_". Pero todos sabemos que esto no funcionará 😉
  • Instale un gancho precompromiso del lado del cliente en todas las máquinas. No he hecho esto todavía, pero parece prometedor.

Acabo de jugar con los diferentes commands de git, lo siguiente podría ser útil: El script de git hook shoud primero comtesting si .gitignore ha cambiado por:

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

Imprima los nombres de los directorys de todas las líneas recién agregadas en .gitignore si están ubicadas en la carpeta Activos:

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

Actualizar

Acabo de escribir un enlace de precompromiso 🙂 Consulte el repository de GitHub git-pre-commit-hook-unity-assets para ver el código y mi blog publique al respecto para get más detalles.

para include metafiles junto con activos, simplemente agregue lo siguiente después de sus exclusiones:

 !*.*.meta 

Aquí hay una muestra de mi .gitignore:

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

Coloco esto en la carpeta con la estructura del repository de git, por lo que mi estructura de proyecto se vería similar a:

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

Espero que ayude.