Estoy confundido acerca de cuál es la forma correcta de ignorar el contenido de un directorio en git.
Supongamos que tengo la siguiente estructura de directorio:
my_project
|--www
|--1.txt
|--2.txt
|--.gitignore
¿Cuál es la diferencia entre poner esto?
www
¿Y esto?
www/*
La razón por la que hago esta pregunta es: en git, si un directorio está vacío, git no incluirá ese directorio vacío en el repositorio. Así que estaba probando la solución que es agregar un archivo .gitkeep adicional debajo del directorio para que no esté vacío. Cuando estaba probando esa solución, si estaba en el archivo .gitignore, escribo como a continuación:
www
!*.gitkeep
No funciona (mi intención es ignorar todos los contenidos en www pero mantener el directorio). Pero si intento lo siguiente:
www/*
!*.gitkeep
¡Entonces funciona! Entonces creo que debe haber algunas diferencias entre los dos enfoques.

binybin/es que el primero ignorará los archivos o carpetas, el segundo solo las carpetas. No sé la diferencia conbin/*Respuestas:
Hay diferencias entre
www,www/ywww/*.Básicamente a partir de la documentación y mis propias pruebas,
wwwencuentro una coincidencia con un archivo o directorio,www/solo coincide con un directorio, mientras quewww/*coincide con directorios y archivos dentrowww.Solo discutiré las diferencias entre
www/ywww/*aquí, ya que las diferencias entrewwwywww/son obvias.Porque
www/, git ignora el directorio enwwwsí, lo que significa que git ni siquiera mirará dentro. Pero parawww/*, git verifica todos los archivos / carpetas dentrowwwe ignora todos ellos con el patrón*. Parece conducir a los mismos resultados, ya que git no rastreará una carpeta vacíawwwsi se ignoran todos sus archivos / carpetas secundarios. Y, de hecho, los resultados no serán una diferencia para el caso de OP conwww/o de formawww/*independiente. Pero hace diferencias si se combina con otras reglas.Por ejemplo, ¿qué pasa si solo queremos incluir
www/1.txtpero ignorar a todos los demás dentrowww?Lo siguiente
.gitignoreno funcionará.Si bien lo siguiente
.gitignorefunciona, ¿por qué?Para el primero, git simplemente ignora el directorio
wwwy ni siquiera mira adentro para incluirlowww/1.txtnuevamente. La primera regla excluye el directorio principalwwwpero nowww/1.txt, y como resultadowww/1.txtno se puede " incluir de nuevo ".Pero para el último, git primero ignora todos los archivos / folers debajo
www, y luego incluye uno de ellos nuevamente, que eswww/1.txt.Para este ejemplo, las siguientes líneas en la documentación pueden ayudar:
fuente
www/1.txty luegowww/harías lo mismo que el segundo enfoque ...Solo estoy analizando la documentación y, por lo que puedo decir, solo difieren en patrones más avanzados, por ejemplo
Me hice la prueba de lo anterior, y si se reemplaza
!/foocon!/foo/*, usted consigue de hecho un resultado diferente.Nota
Excluirá cualquier archivo
foo, perosolo excluirá directorios llamados foo.
fuente
Aparte de las respuestas perfectamente buenas que ya ha obtenido, debe tener en cuenta que puede tener
.gitignoretenerlas en cualquier parte de su proyecto, incluidas las subcarpetas.Entonces, si desea ignorar todos los archivos dentro
www, pero quéwwwcarpeta se va a versionar, en lugar de usar un nombre vacío.gitkeep,.dummyo el nombre que elija, ¿por qué no usar un.gitignoreallí, diciendo que ignore todos los archivos?En la raíz
.gitignore(a), no dice nada sobre elwwwcarpeta o su contenido.En la
www/.gitignore(b) pones lo siguiente:De esta manera todo parece más organizado (al menos para mí).
fuente
Para ignorar todo en un directorio excepto los archivos de puntos, puede usar el siguiente patrón glob en su
.gitignore:Así que no es necesario un extra
.gitignore, simplemente agregue un.keeparchivo a suwwwdirectorio.fuente