GIT, LAS CARPETAS Y LOS ARCHIVOS META

Una aclaración importante que me parece que vale la pena aclarar es que GIT NO TRACKEA CARPETAS. Esto no quiere decir que todos nuestros archivos van a ir a parar a un lugar sueltos o que no podamos crear carpetas. Esto significa que Git sabe que un archivo está en una carpeta y que, por ende, debería crearla si no existe, por la ruta en la que figura que lo guardamos, PERO NADA MÁS. O sea que si creamos una carpeta vacía, y volvemos a SourceTree, no nos va a marcar ningún cambio.

Esto parece dentro de todo lógico, y no parece una real preocupación… O sí?

El “problema” que podemos llegar a encontrarnos con esto es, en este caso, Unity. Por qué? Porque Unity crea un archivo “.meta” por cada archivo y/o carpeta que nosotros agregamos al proyecto.

Y cuál sería el problema de esto? El “problema” (entre comillas porque no es realmente un problema grave), es que si nosotros borramos la carpeta desde un lugar que no sea Unity (por ejemplo, desde el explorador de Windows o Finder en el caso de Mac), lo que va a pasar es que esta acción no va a borrar el archivo “.meta” asociado a dicha carpeta. Entonces, si bien Git no va a detectar que borramos esa carpeta porque NO TRACKEA CARPETAS, va a seguir conservando el archivo “.meta”. Y acá viene el meollo de la cuestión: Si el archivo “.meta” está trackeado, cuando descarguemos el repositorio Git nos va a traer ese archivo. Y cuando Unity detecte ese archivo, qué va a hacer? Pues… CREAR ESA CARPETA QUE LE ESTÁ FALTANDO. Entonces, va a quedar como una carpeta vacía que jamás se va.

Muy posiblemente en varios tutoriales de Unity de diversas fuentas hayan visto en algún momento alguna aclaración sobre “NO ELIMINAR ARCHIVOS DE UNITY FUERA DE UNITY”, principalmente los que están dentro de la carpeta “Assets“. Así que cualquier carpeta vacía que quieran eliminar que se encuentre DENTRO de la carpeta “Assets“, borrenla desde Unity así Git elimina también el archivo “.meta”.

Una aclaración importante sobre estos archivos es que cuando ustedes agreguen algo nuevo, ya sea archivo o carpeta, Unity agrega ese “.meta” asociado a lo que acaban de crear. Así que SIEMPRE deberían agregar ese archivo al repositorio también, para evitar que Unity genere otro o incluso para no perder determinadas configuraciones. Esto también es importante porque Unity asigna un ID único a cada archivo, y lo guarda en el archivo .meta. Si ustedes lo borran o mueven el archivo desde el Explorador de Windows o Finder, este archivo queda “huérfano” y Unity lo borra, para luego generar otro. Esta acción de generar un nuevo archivo también implica generar un nuevo ID, por lo tanto, si el archivo “.meta” se pierde o Unity tiene que volver a generarlo, cualquier lugar donde ustedes hayan asignado ese asset también se va a perder. Por ejemplo:

Imaginen que crean un script para un personaje, y le asocian el prefab de una bala, luego, fuera de Unity, mueven el prefab de esa bala. Lo que va a pasar es que Unity genera nuevamente el “.meta” de ese prefab, poniendole otro ID. Y cuando vuelvan al proyecto BOOOMMMM: El prefab no está asignado.

Si quieren investigar más al respecto, pueden leer esta página de Unity, donde habla de la importancia de estos archivos:

https://docs.unity3d.com/es/2018.4/Manual/BehindtheScenes.html