Ignorando archivos y buenos hábitos


Clonas un proyecto llamado weather-app, corres npm install, y revisas el estado de tu nuevo repositorio.
$ git status
Untracked files:
(use "git add <file>..." to include in what will be committed)
node_modules/
dist/
.envAparecen tres carpetas y archivos como no rastreados, y ninguno de ellos debería estar en un commit. node_modules/ son miles de archivos que npm install regenera desde package.json en segundos. dist/ es el resultado del build, que se reconstruye a partir de tu código fuente cada vez. Y .env guarda una API key. Nada de eso debería terminar jamás en el historial de tu proyecto, y escribir git add . sin pensarlo es justo cómo pasa.
Decirle a Git qué debe ignorar
Un archivo .gitignore lista patrones de archivos y carpetas que Git nunca debe rastrear. Lo creas una sola vez en la raíz de tu proyecto, el mismo lugar donde corriste git init cuando configuraste el repositorio en Tu primer repositorio, y desde ese momento, git status y git add . ignoran silenciosamente todo lo que coincida.
# .gitignore
node_modules/
dist/
.envCada línea es un patrón: un nombre de carpeta simple como dist/ ignora toda esa carpeta, dondequiera que aparezca en el proyecto. Haz commit del archivo .gitignore mismo. Es pequeño, le es útil a cualquiera que clone el proyecto, y pertenece al historial igual que tu código fuente.
$ git status
On branch main
nothing to commit, working tree cleanCon los patrones en su lugar, git status se queda callado. Ese es justamente el punto: las carpetas y archivos que nunca quieres comitear dejan de aparecer como ruido, así que lo que sí aparece es realmente lo que importa.
.gitignore lista lo que Git nunca debe rastrear: node_modules/, dist/ y .env son los sospechosos habituales en casi cualquier proyecto. Haz commit del archivo .gitignore mismo para que todos los que clonen el proyecto obtengan el mismo estado limpio. Una vez perdí toda una tarde agregando por accidente miles de archivos de dependencias al staging antes de aprender esto. Nunca comitees secretos
Una API key, una contraseña de base de datos o un certificado de firma nunca deberían aparecer en un commit. Eso vale tanto para un repositorio privado como para uno público, y vale desde el primer commit en adelante. Pon los secretos en un archivo como .env, agrega ese archivo a .gitignore desde el primer día, y carga los valores en tu aplicación desde ahí en vez de escribirlos directamente en tus archivos de código.
# .env
WEATHER_API_KEY=sk_live_9f8e7d6c5b4a# .gitignore
.envSigue esta regla de forma automática, siempre, sin excepciones. Una clave que quede en un commit es accesible para cualquiera con acceso al repositorio, y en un repositorio público, para cualquier persona.
.env y agrega .env a tu .gitignore antes de correr git add por primera vez. Esta es la única regla de todo este capítulo que vale la pena tratar como absoluta. Agregar un archivo a .gitignore después de que ya está rastreado
Este es el tropiezo que atrapa a casi todo el mundo al menos una vez. Comiteas un archivo por accidente, te das cuenta del error, lo agregas a .gitignore (la línea de echo de abajo añade la ruta a ese archivo), y esperas que Git lo olvide. No lo hace.
$ git add config/settings.json
$ git commit -m "Add app settings"
# más adelante, te das cuenta de que fue un error
$ echo "config/settings.json" >> .gitignore
$ git status
On branch main
nothing to commit, working tree cleangit status muestra un árbol limpio, pero config/settings.json sigue rastreado y sigue apareciendo en cada git log futuro y en cada clon. Las reglas de ignorados solo aplican a archivos que Git aún no conoce. Una vez que un archivo fue agregado y comiteado, es parte de tu historial, y .gitignore no tiene ninguna opinión sobre archivos que ya están en ese historial.
Para realmente dejar de rastrearlo de ahí en adelante, dile a Git que deje de seguirlo, dejando el archivo intacto en tu disco:
$ git rm --cached config/settings.json
$ git commit -m "Stop tracking config/settings.json"git rm --cached <archivo> quita el archivo del rastreo de Git sin borrarlo de tu directorio de trabajo. Comitea esa eliminación, y desde ese momento tu patrón en .gitignore hace el trabajo que querías que hiciera desde el principio.
.gitignore después de que Git ya lo rastrea no le hace nada a ese archivo. Las reglas de ignorados solo aplican a archivos que Git nunca ha agregado. Para dejar de rastrear un archivo que se coló por accidente, corre git rm --cached <archivo> y comitea ese cambio. Buenos hábitos: commits pequeños y un repositorio limpio
Un .gitignore bien cuidado es la mitad de mantener un repositorio agradable para trabajar. La otra mitad es cómo organizas tus commits. Haz que cada commit sea un cambio enfocado: una corrección de bug, una pequeña funcionalidad, un solo refactor. Si una tarde de trabajo toca varias cosas sin relación entre sí, divídela en varios commits en vez de meterlo todo en uno solo al final del día.
$ git add src/weather-widget.js
$ git commit -m "Fix temperature rounding in weather widget"Los commits pequeños son más fáciles de revisar, más fáciles de revertir si algo se rompe, y más fáciles de entender seis meses después cuando estás tratando de recordar por qué existe una línea de código. El ciclo del commit explica qué hace útil a un mensaje de commit; este hábito se trata de mantener el cambio en sí lo bastante pequeño como para que sea posible escribir un buen mensaje.
.gitignore cubriendo las carpetas y secretos que nunca deben rastrearse. Esos dos hábitos juntos son la mayor parte de lo que hace agradable trabajar en un repositorio. Los hábitos pequeños, formados desde el principio, te ahorran mucha limpieza después. 
