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 *