También disponible en: English · Português · Français · العربية
Generador de .gitignore
Compón un .gitignore a partir de plantillas y después comprueba una ruta real contra él: veredicto, línea que lo decidió y el directorio sobre el que se decidió.
¿Qué es un generador de .gitignore?
Un archivo .gitignore le dice a git qué rutas debe dejar en paz: resultados de compilación, carpetas de dependencias, restos del editor, cualquier cosa que no quieras en el historial. Un generador te da un archivo de partida razonable para las tecnologías que usas, para que no tengas que escribir node_modules de memoria cada vez que empiezas un repositorio.
La parte de generar es la parte fácil, y por sí sola vale poco: no puedes verificar una lista de patrones mirándola. Por eso esta página la empareja con la parte que sí se puede comprobar: pega una ruta y te dice si git la ignoraría, y qué línea tomó esa decisión.
Es en esa segunda mitad donde están las sorpresas. Un .gitignore no es una lista de archivos, es un conjunto de reglas con precedencia, anclaje y semántica de directorios, y la regla que todo el mundo cita está incompleta de una forma que acaba mordiendo a casi todos.
Cómo usarlo
- Marca las tecnologías que estés usando. El archivo se compone a partir de plantillas, con un encabezado por cada una. Las marcadas como globales van en tu propio ~/.gitignore_global y no en el repositorio: la carpeta de tu editor es asunto tuyo, no del proyecto.
- Edita el archivo a tu gusto. Es un área de texto normal. Si lo que quieres es el comprobador, pega ahí directamente un .gitignore que ya tengas.
- Escribe una ruta y lee el veredicto. Obtienes si se ignora o no, el número y el texto de la línea que decidió y, cuando toca, el directorio padre sobre el que se tomó realmente la decisión.
Por qué !build/keep.txt no hace nada, y qué escribir en su lugar
La regla que todo el mundo repite es que gana el último patrón que coincide. Es cierta hasta donde llega, y predice la respuesta equivocada en la duda más habitual sobre .gitignore. Con build/ en una línea y !build/keep.txt en la siguiente, el archivo sigue ignorado. Git está de acuerdo: si se lo preguntas, señala la línea 1, la del directorio, como la que decidió.
El motivo es que git no recorre una lista plana de patrones contra tu ruta. Recorre los directorios de la ruta de arriba abajo, y en cuanto un directorio queda excluido ya no entra en él. No hay ocasión de que un patrón posterior vuelva a incluir nada, porque nunca se mira lo que hay dentro.
El arreglo es un carácter. Excluye el contenido del directorio en lugar del directorio: build/* en vez de build/. Entonces git sí entra, la negación se alcanza y build/keep.txt se conserva mientras todo lo demás de ahí dentro sigue ignorado. Esta herramienta te marca la forma rota: enumera cualquier negación que una regla anterior haya dejado inalcanzable, así te enteras antes de hacer commit y no después de preguntarte por qué el archivo nunca apareció.
El resto de la sintaxis también conviene conocerla, y el comprobador la ejercita entera: una barra en cualquier sitio que no sea el final ancla el patrón al directorio del propio archivo, de modo que /build solo coincide en la raíz mientras que build coincide a cualquier profundidad; una barra final restringe el patrón a directorios; un asterisco se detiene en la barra pero uno doble la cruza; y una exclamación inicial niega, salvo que la escapes.
Límites honestos
Las plantillas son un punto de partida, no una autoridad. Son una selección del conjunto de dominio público que publica github, y debajo de la herramienta está la fecha en la que se tomó esta instantánea. Una plantilla que no se ha puesto al día con algún directorio de compilación nuevo está incompleta, y eso lo ves y lo arreglas en el área de texto; es una cosa distinta de estar equivocada.
Esta página además razona sobre un único archivo .gitignore cada vez. Un repositorio real puede tener varios (uno por directorio, más .git/info/exclude, más tu archivo global) y git los aplica de menos a más específico, así que una regla en un subdirectorio gana a una de la raíz. El comprobador responde por el archivo que hay en el cuadro, relativo a donde esté ese archivo.
Dos cosas más que una ruta por sí sola no puede decirte. Un archivo que ya está siendo seguido lo sigue estando por mucho que lo añadas al .gitignore, porque las reglas de ignorado se aplican a los archivos no seguidos; hace falta git rm --cached para dejar de seguirlo. Y esto razona sobre patrones y no sobre tu disco, así que trata la ruta exactamente como la escribes: la casilla está ahí porque ser o no un directorio cambia la respuesta para los patrones que terminan en barra.
Por último, los veredictos se comprobaron contra el propio git y no contra otra implementación: un barrido generado de 252 combinaciones de patrón y ruta, ejecutado en un repositorio real, sin ninguna discrepancia.
¿Por qué es gratis?
Porque no cuesta nada mantenerlo. La comparación ocurre en tu navegador; no se sube ningún archivo, ningún servidor ve tus rutas y no hay cuenta.
Las plantillas son de dominio público, las reglas de los patrones salen del comportamiento documentado del propio git, y la prueba que compara esta implementación con git está guardada junto al código.