El archivo .gitignore se utiliza para especificar los archivos y directorios que se deben ignorar en un repositorio Git. Cada línea en el archivo .gitignore representa una regla de ignorar archivos o directorios.

Las reglas pueden tener diferentes patrones y formatos:

Patrones de coincidencia de ruta absoluta: comienzan con una barra diagonal (/) y especifican una ruta absoluta desde la raíz del repositorio hasta un archivo o directorio que se debe ignorar. Ejemplo: /ruta/al/archivo-a-ignorar.txt.

Patrones de coincidencia de ruta relativa: no comienzan con una barra diagonal y especifican una ruta relativa desde la ubicación del archivo .gitignore hasta el archivo o directorio que se debe ignorar. Ejemplo: carpeta-a-ignorar/.

Caracteres comodín: se pueden utilizar los caracteres comodín para especificar patrones más generales. El asterisco (*) representa cualquier cadena de caracteres y se puede usar en cualquier parte del patrón. Ejemplo: *.log para ignorar todos los archivos con extensión .log. El signo de interrogación (?) representa cualquier carácter único.

Negación: se puede utilizar el signo de exclamación (!) para negar una regla. Es decir, se puede ignorar todo en un directorio excepto un archivo o directorio específico. Ejemplo: carpeta-a-ignorar/* !archivo-a-incluir.txt.

Comentarios: se pueden agregar comentarios en el archivo .gitignore precediendo la línea con el símbolo de almohadilla (#).

Es importante tener en cuenta que las reglas en el archivo .gitignore son relativas a la hubicacion del archivo (las reglas se aplican solo donde se coloca el archivo) y solo se aplican a los archivos y directorios que no están siendo rastreados actualmente por Git. Si un archivo ya ha sido incluido en el repositorio, no se ignorará aunque se agregue una regla en el archivo .gitignore posteriormente. Además, si se desea agregar una excepción a una regla de ignorar archivos o directorios, se debe especificar una nueva regla que negará la regla original.

Ejemplo:

Archivo .gitignore

.ignora_archivo #ignora el archivo en cuestion

/web/* #ignora todo lo que ha dentro del directorio

/web/ #ignora el directorio y todo su contenido

!/web/example.es #niega la regal anterior para el archivo en cuestion

*.log #ignora todos los archivos con extension log