Git: ignorar archivos con .gitignore

G

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?

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.

Usando .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:

.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 decir git 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.

About the author

Ramiro de la Vega

Bienvenido a Pharos.sh

Soy Ramiro de la Vega, Estadounidense con raíces Españolas. Empecé a programar hace casi 20 años cuando era muy jovencito.

Espero que en mi web encuentres la inspiración y ayuda que necesitas para adentrarte en el fantástico mundo de la programación y conseguir tus objetivos por difíciles que sean.

Add comment

Sobre mi

Últimos Post

Etiquetas

Esta web utiliza cookies propias para su correcto funcionamiento. Al hacer clic en el botón Aceptar, aceptas el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Más información
Privacidad