Cuando trabajas en un proyecto real, no todo lo que hay en la carpeta merece estar en Git. Hay archivos que Git no debería tocar: contraseñas, configuraciones privadas, carpetas enormes de dependencias que cualquiera puede descargar por su cuenta...
Para eso existe el archivo .gitignore. Es un fichero de texto donde le dices a Git exactamente qué tiene que ignorar.
Vamos a verlo con un ejemplo real. Partimos de mi-proyecto e inicializamos un proyecto Node.js:
npm init -yEsto crea el archivo package.json. Ahora instalamos una dependencia, por ejemplo parcel, un bundler muy usado:
npm install parcel --save-devLa instalación crea una carpeta node_modules con cientos de archivos y el archivo package-lock.json. Si hacemos git status vemos el desastre:
Si haces git status, vemos el desastre:
On branch main
Untracked files:
(use "git add <file>..." to include in what will be committed)
node_modules/
package.json
package-lock.json
nothing added to commit but untracked files presentpackage.json y package-lock.json sí queremos subirlos a Git (describen qué dependencias tiene el proyecto). Pero node_modules no: ocupa muchísimo y cualquiera puede recrearla ejecutando npm install. No tiene sentido incluirla en el repositorio.
En la raíz del proyecto, creamos un archivo que se llama exactamente .gitignore (con el punto delante, sin extensión):
touch .gitignoreLo abrimos y añadimos una línea por cada cosa que queremos ignorar:
.gitignore
node_modules/
Guardamos el archivo. Ahora hacemos git status de nuevo:
On branch main
Untracked files:
(use "git add <file>..." to include in what will be committed)
.gitignore
nothing added to commit but untracked files presentnode_modules ha desaparecido del listado. Git ya no la ve. Solo aparece el propio .gitignore, que sí queremos añadir al repositorio para que cualquiera que clone el proyecto tenga las mismas reglas.
Puedes ignorar archivos concretos, carpetas enteras o patrones. Algunos ejemplos habituales:
# Dependencias
node_modules/
# Variables de entorno y credenciales
.env
.env.local
# Archivos que genera el sistema operativo
.DS_Store # Mac
Thumbs.db # Windows
# Carpetas de compilación
dist/
build/
Las líneas que empiezan con # son comentarios: Git las ignora y sirven para que el archivo sea más fácil de leer.
El / al final de una entrada indica que es una carpeta. Sin él también funciona, pero es buena práctica ser explícito.
| Patrón | Qué ignora |
|---|---|
node_modules/ |
La carpeta node_modules y todo lo que hay dentro |
*.log |
Todos los archivos con extensión .log |
*.log |
Todos los archivos con extensión .log |
dist/ |
La carpeta dist |
.env |
El archivo .env exacto |
*.env |
Cualquier archivo que acabe en .env |
build/*.js |
Los archivos .js dentro de build (no en subcarpetas) |
El archivo .env merece una mención especial. Es donde los proyectos guardan variables de entorno: claves de API, contraseñas de bases de datos, tokens de servicios externos...
# .env
DB_PASSWORD=micontraseñasecreta
API_KEY=abc123xyz
Este archivo nunca debe entrar en Git. Si lo subes a un repositorio público (o incluso privado al que tenga acceso otra persona), estás exponiendo tus credenciales.
Añade siempre .env al .gitignore antes de crear el archivo.
Si ya hiciste commit de un archivo que no debería estar en Git, añadirlo al .gitignore después no lo elimina del historial. Git ya lo conoce y lo sigue rastreando.
Para dejar de rastrearlo hay que decírselo expresamente:
git rm --cached .envEl flag --cached le dice a Git que deje de hacer seguimiento del archivo pero que no lo borre del disco. A partir de ese commit, el archivo ya no estará en el repositorio.
git add .gitignore
git commit -m "Deja de rastrear .env y añade gitignore"Aunque hayas hecho esto, el archivo seguirá siendo visible en el historial de commits anteriores. Si subiste credenciales reales, lo más seguro es regenerarlas.
No tienes que escribir el .gitignore desde cero cada vez. GitHub mantiene un repositorio con plantillas para todos los lenguajes y frameworks habituales. Cuando creas un repositorio en GitHub puedes elegir una plantilla directamente desde la interfaz.
También puedes visitar gitignore.io e introducir las tecnologías que usas. Te genera el .gitignore automáticamente.
El archivo .gitignore sí debe estar en Git. Así cualquier persona que clone tu proyecto tendrá exactamente las mismas reglas de ignorado desde el principio.
git add .gitignore
git commit -m "Añade .gitignore"
