Git es una gran herramienta para rastrear todos los archivos en un proyecto, ya sea que solo tenga unos pocos para rastrear o miles. Pero el hecho de que exista un archivo en su proyecto no significa que automáticamente desee realizar un seguimiento de él y de sus cambios durante la vida útil del proyecto.
En este artículo, veremos algunos antecedentes sobre por qué es importante decirle a Git que ignore ciertos archivos, cómo hacerlo realmente y algunas de las mejores prácticas.
¿Por qué utilizar .gitignore?
Contenido
Ignorar manualmente los archivos que no desea rastrear es manejable en un proyecto a pequeña escala, pero tan pronto como su proyecto comience a crecer e incluya decenas o cientos de archivos no controlados por versión, puede convertirse en un gran problema. Estos archivos comenzarán a saturar la lista de «archivos sin seguimiento», lo que puede hacer que pase por alto los archivos legítimos que deben estar en el repositorio.
Para ayudar con este problema, Git tiene un mecanismo de «ignorar» en forma de un archivo llamado .gitignore
. Con este archivo y una coincidencia de patrones muy simple, puede decirle a Git qué tipos de archivos desea que ignore y no rastree en su repositorio. Si un nombre de archivo en su proyecto coincide con uno de los patrones en el .gitignore
file, Git no intentará rastrear el archivo y no aparecerá en la lista «Archivos sin rastrear».
Qué archivos ignorar
Mucho de esto se reduce a preferencias personales, pero en general tiendo a seguir estas reglas generales sobre qué archivos no rastrear:
- Archivos del sistema (es decir, de Mac
.DS_Store
) - Archivos de configuración de la aplicación (es decir
app.config
,.env
, etc.) - Construir artefactos (es decir
*.pyc
) - Dependencias instaladas (es decir
node_modules
) - Archivos de texto personales y de no documentación (es decir,
todo.txt
) - Registros y datos de la aplicación (p. Ej.
*.log
,*.sqlite
, etc.)
Hay bastantes otros tipos de archivos que a menudo se ignoran, pero mucho de esto se reduce a preferencias personales, como las siguientes:
- Archivos de configuración de desarrollo (es decir,
.jshintrc
) - Código fuente generado o minimizado (es decir
*.min.js
) .gitignore
Sí, incluso el seguimiento de .gitignore
archivo en sí mismo se debate.
Los consejos que se brindan aquí pueden cambiar dependiendo de con quién hable, por lo que es posible que desee tomar algo de esto con un grano de sal. Todos tienen sus opiniones sobre lo que se debe o no se debe rastrear, por lo que su mejor opción es revisar ambos lados del debate y luego tomar una decisión por sí mismo basándose en lo que es mejor para su proyecto.
Te puede interesar:Obtener cadenas de consulta y parámetros en Express.jsUsando .gitignore
Los conceptos básicos del uso de esta función de ignorar son bastante sencillos, que es lo que veremos en esta sección.
Por el bien de nuestro ejemplo, digamos que tenemos un nuevo proyecto con los siguientes archivos sin seguimiento:
$ git status
On branch master
Initial commit
Untracked files:
(use "git add <file>..." to include in what will be committed)
.DS_Store
.env-dev
.env-prod
index.js
node_modules/
package-lock.json
package.json
Es un poco inútil rastrear el .DS_Store
y node_modules/
archivos en nuestro repositorio, por lo que queremos ignorarlos. Para hacerlo, primero crearemos un archivo en el directorio raíz del proyecto llamado .gitignore
:
$ touch .gitignore
La forma más sencilla de ignorar un archivo, y la más común, es simplemente agregar el nombre de archivo completo al archivo ignorado. Entonces, para ignorar los archivos anteriores, por ejemplo, queremos agregar lo siguiente:
Te puede interesar:Cargar archivos con Spring Boot.DS_Store
node_modules
Una vez guardado, Git ahora nos mostrará los siguientes archivos sin seguimiento:
$ git status
...
Untracked files:
(use "git add <file>..." to include in what will be committed)
.env-dev
.env-prod
.gitignore
index.js
package-lock.json
package.json
Ambos .DS_Store
y node_modules
han desaparecido de la lista «Archivos sin seguimiento», pero todavía tenemos algunos de los que queremos eliminar, .env-dev
y .env-prod
. Para evitar tener que agregar explícitamente cada uno a .gitignore
(especialmente si tenemos que agregar más de estos archivos para entornos de prueba y preparación), usaremos un comodín:
.DS_Store
node_modules
.env-*
Y ahora nuestra lista de «archivos sin seguimiento» se ha reducido aún más:
$ git status
...
Untracked files:
(use "git add <file>..." to include in what will be committed)
.gitignore
index.js
package-lock.json
package.json
El carácter comodín (*
) coincidirá con cualquier cosa excepto con una barra. Y usando dos caracteres comodín seguidos (**
) seguido de una barra oblicua coincidirá con su patrón en todos los directorios. Así por ejemplo, public/**/*.min.js
ignorará todos los archivos JavaScript minificados en el public
directorio, independientemente de la profundidad de los directorios.
El mecanismo de ignorar de Git también admite algunos expresión regular-como sintaxis, con alguna sintaxis adicional propia:
[a-zA-Z]
: Coincide con un rango de caracteres?
: Coincide con 0 o 1 ocurrencias del elemento anterior!
: Niega la coincidencia o el carácter anterior
Git también le permite agregar comentarios a este archivo, que comienzan con un #
. Esto es muy útil para organizar el archivo o agregar explicaciones sobre por qué se agregaron ciertos patrones.
Jerarquía de archivos .gitignore
Git comprueba más que solo el local .gitignore
archivo para qué archivos debe ignorar. Como hemos visto hasta ahora, la ubicación más común es colocar un .gitignore
archivo en el directorio raíz de su proyecto. Otra opción es tener un .gitignore
archivo anidado en un directorio de su proyecto. Aunque es menos común en la práctica, esto puede ser útil para aplicar un archivo ignorado completo en un subdirectorio que tiene muchas reglas propias.
Otra característica útil es un archivo ignorado global. Esto suele ser un .gitignore
archivo colocado en su directorio personal:
$ touch ~/.gitignore
Si es necesario, puede cambiar la ubicación de este archivo global con el siguiente comando:
$ git config --global core.excludesFile ~/.gitignore
Cualquier patrón colocado en este archivo debe ser para tipos de archivo que esté seguro de que nunca querrá rastrear, como el .DS_Store
archivo para los usuarios de Mac. Es fácil olvidarse de este archivo ignorado global, que puede causar mucha confusión o problemas cuando se pierde la confirmación de un archivo porque fue ignorado globalmente.
Confirmación de archivos ignorados
Supongamos que tiene una excepción que desea hacer para un archivo que generalmente se ignora, pero por alguna razón este proyecto en particular lo necesita. En casos como este, tiene algunas opciones:
- Dile a Git que no ignore este archivo prefijando el nombre del archivo con un
!
en .gitignore, es decir!.env
. Esto anulará cualquier archivo ignorado global o ignorará archivos en directorios principales. - Utilizar el
--force
opción (o-f
bandera) al organizar sus archivos, es decirgit add .env --force
Conclusión
En este artículo vimos cómo Git proporciona un mecanismo para que le digamos qué archivos no deben rastrearse en nuestro repositorio, evitando que tengamos que evitar que se agreguen archivos manualmente. Esta es una característica poderosa que proporciona una sintaxis rica, así como una jerarquía para controlar mejor qué archivos se ignoran y cuáles no.
Te puede interesar:Git: crear un nuevo repositorio