Git: ignorar archivos con .gitignore

    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.

    Etiquetas:

    Deja una respuesta

    Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *