He visto preguntas similares ( 1 , 2 y 3 ), pero no obtengo una solución adecuada de ellas.
Necesito ignorar todos los archivos de una carpeta en particular, excepto un tipo de archivo específico. La carpeta es un subdirectorio de la ruta raíz. Déjame nombrar la carpeta Resources
. Como no quiero complicar las cosas, permítanme ignorar los archivos de todas las carpetas con el nombre Resources
que sea.
Esta es la solución más común (en todas las preguntas duplicadas)
# Ignore everything
*
# Don't ignore directories, so we can recurse into them
!*/
# Don't ignore .gitignore
!.gitignore
# Now exclude our type
!*.foo
El problema con esta solución es que deja de rastrear los archivos recién agregados (ya que *
ignora todos los archivos). No quiero seguir excluyendo todos y cada uno de los tipos de archivos. Quiero un comportamiento normal donde si se agrega algún archivo nuevo, lo git status
muestra.
Finalmente obtuve una solución aquí . La solución es agregar otro .gitignore
archivo en la Resources
carpeta. Esto funciona correctamente.
¿Puedo lograr lo mismo con un archivo ignorado? Me parece un poco torpe tener muchos archivos ignorados en diferentes directorios.
Esto es lo que estoy tratando de lograr:
# Ignore everything under Resources folder, not elsewhere
Resources
# Don't ignore directories, so we can recurse into them
!*Resources/
# Now exclude our type
!*.foo
Pero esto da la salida opuesta. Ignora los *.foo
tipos y rastrea otros archivos.
DirectoryName1/** DirectoryName1/**/*
para cada uno de ellos. Primero eliminan directorios, pero necesita el segundo para eliminar todos los tipos de archivos.La mejor respuesta es agregar un archivo Resources / .gitignore en Resources que contenga:
Si no desea o no puede agregar ese archivo .gitignore, hay una solución poco elegante:
Deberá editar ese patrón si agrega directorios más profundos de lo especificado.
fuente
Esto puede parecer estúpido, pero verifique si aún no ha agregado la carpeta / archivos que está tratando de ignorar al índice antes. Si lo hizo, no importa lo que coloque en su archivo .gitignore, las carpetas / archivos aún estarán almacenados.
fuente
git rm --cached <path to files>
para borrar esos archivos ignorados de git mientras los deja en el sistema de archivos.O lo estoy haciendo mal o la respuesta aceptada ya no funciona con el git actual.
De hecho, encontré la solución adecuada y la publiqué en casi la misma pregunta aquí . Para más detalles dirígete allí.
Solución:
fuente
!/Resources/**/
fue crucial para que git no ignorara los subdirectorios.