Gitignore: La guía definitiva para ignorar archivos en Git
El control de versiones es esencial para cualquier proyecto de desarrollo de software. Git es uno de los sistemas de control de versiones más populares y ampliamente utilizados, y juega un papel crucial en la gestión de cambios de código, la colaboración con otros desarrolladores y el seguimiento de la historia del proyecto. Sin embargo, en el proceso de uso de Git, hay ciertos archivos o carpetas que no queremos que se incluyan en el repositorio. Estos pueden ser archivos temporales, archivos de configuración específicos del sistema o archivos binarios grandes que no son necesarios para el código fuente principal. Es aquí donde el archivo .gitignore entra en juego.
Un archivo .gitignore es un archivo de texto simple que le dice a Git qué archivos o carpetas ignorar al rastrear un repositorio. Este archivo es esencial para mantener el repositorio limpio y organizado, evitando la inclusión de archivos innecesarios que podrían complicar la gestión del código. Al especificar los archivos o carpetas que se deben ignorar en el archivo .gitignore, se evita que se agreguen al repositorio de Git, lo que facilita el control de versiones y el trabajo en equipo.
¿Por qué usar un archivo .gitignore?
El uso de un archivo .gitignore aporta numerosos beneficios, tanto para los desarrolladores individuales como para los equipos de trabajo:
- Limpieza del repositorio: Evita que archivos innecesarios y temporales se agreguen al repositorio, manteniendo un repositorio limpio y organizado.
- Colaboración eficiente: Permite a los equipos trabajar juntos sin que se compartan archivos innecesarios entre los miembros del equipo.
- Mejor control de versiones: Facilita el seguimiento de los cambios del código fuente y la gestión de versiones al reducir la cantidad de archivos rastreados.
- Mejor seguridad: Evita la exposición de información sensible o archivos confidenciales en el repositorio.
- Simplifica la gestión de archivos: Permite a los desarrolladores concentrarse en el código fuente principal sin preocuparse por los archivos temporales o de configuración.
Cómo crear un archivo .gitignore
El archivo .gitignore se crea en la raíz del repositorio, donde también se encuentra el archivo README.md y el archivo .git. Para crear un archivo .gitignore puedes utilizar un editor de texto como Notepad (Windows), TextEdit (Mac) o cualquier otro editor de tu preferencia.
Creación del archivo .gitignore:
- Crea un nuevo archivo de texto: Nombra el archivo como
.gitignorey guárdalo en la raíz del repositorio. - Añade las entradas: En cada línea del archivo
.gitignoreescribe la ruta del archivo o carpeta que deseas ignorar.
Ejemplo de un archivo .gitignore básico:
«`
Ignora archivos temporales generados por el editor
*.swp
*.tmp
*~
*.bak
Ignora archivos de configuración específicos del sistema
config.ini
settings.xml
Ignora archivos compilados
*.o
*.a
*.so
«`
Los patrones de coincidencia en .gitignore
Para especificar archivos o carpetas para ignorar en .gitignore, se utilizan patrones de coincidencia. Estos patrones ayudan a definir de manera flexible qué archivos se deben ignorar. Los patrones de coincidencia más comunes son:
- Coincidencia exacta: Especifica el nombre exacto del archivo o carpeta a ignorar. Por ejemplo,
config.iniignorará solo el archivoconfig.ini. - Coincidencia de comodines: Utiliza caracteres especiales como
*(asterisco) y?(signo de interrogación) para especificar patrones de coincidencia. Por ejemplo,*.logignorará todos los archivos con extensión.log, mientras que*.?mlignorará archivos comoindex.htmlystyle.css. - Coincidencia de directorios: Utiliza
/(barra diagonal) para especificar directorios. Por ejemplo,build/ignorará todo el directoriobuild/, incluidos todos los archivos y subdirectorios dentro de él. - Ignorar archivos específicos dentro de un directorio: Utiliza
!(signo de exclamación) para incluir archivos específicos dentro de un directorio. Por ejemplo,build/!index.htmlignorará todos los archivos dentro del directoriobuild/excepto el archivoindex.html.
Ejemplos de patrones de coincidencia:
- Ignorar archivos con extensión .txt:
*.txt - Ignorar archivos con nombre que comience con «temp»:
temp* - Ignorar todos los archivos dentro de la carpeta «build/»:
build/ - Ignorar todos los archivos dentro de la carpeta «build/» excepto el archivo «index.html»:
build/ !index.html - Ignorar archivos con extensión .log en la carpeta «logs/»:
logs/*.log
Archivos .gitignore locales vs. globales
Hay dos tipos de archivos .gitignore: locales y globales.
- Archivo
.gitignorelocal: Se aplica solo al repositorio actual en el que se encuentra. - Archivo
.gitignoreglobal: Se aplica a todos los repositorios en la máquina del usuario.
Archivo .gitignore local:
- Se crea en la raíz del repositorio.
- Ignora los archivos solo en ese repositorio específico.
- Es útil para ignorar archivos específicos de un proyecto en particular.
Archivo .gitignore global:
- Se crea en el directorio de inicio del usuario.
- Ignora los archivos en todos los repositorios de Git en la máquina del usuario.
- Es útil para ignorar archivos que no deben incluirse en ningún repositorio.
Crear un archivo .gitignore global:
- Ejecuta el siguiente comando en tu terminal:
git config --global core.excludesfile ~/.gitignore_global
- Crea un archivo llamado
.gitignore_globalen tu directorio de inicio (~). - Agrega las entradas de los archivos y carpetas que deseas ignorar en todos los repositorios.
Ejemplo de archivo .gitignore_global:
«`
Ignora archivos temporales y archivos de configuración específicos del sistema
*.swp
*.tmp
*~
*.bak
config.ini
settings.xml
«`
Cómo detener el seguimiento de un archivo existente
Si ya has agregado un archivo al repositorio de Git y deseas detener el seguimiento de él, puedes usar el siguiente comando:
git rm --cached nombre-del-archivo
Por ejemplo:
git rm --cached config.ini
Este comando eliminará el archivo del índice de Git, pero no lo eliminará del sistema de archivos. Deberás agregar el archivo a .gitignore para evitar que se vuelva a agregar en el futuro.
Cómo detener el seguimiento de todos los archivos en .gitignore
Si necesitas detener el seguimiento de todos los archivos que se encuentran en .gitignore, puedes realizar los siguientes pasos:
- Haz commit de los cambios pendientes:
git commit -m "Actualización del repositorio"
- Ejecuta el siguiente comando:
git rm -r --cached .
- Agrega todos los archivos:
git add .
- Realiza un commit de los cambios:
git commit -m "Actualización del repositorio"
Cómo revertir el comando git rm --cached
Si accidentalmente ejecutaste git rm --cached nombre-del-archivo y necesitas revertir la acción, puedes usar el siguiente comando:
git add nombre-del-archivo
Por ejemplo:
git add config.ini
Este comando agregará el archivo de nuevo al índice de Git.
Consideraciones adicionales sobre .gitignore
- La orden de las entradas en
.gitignorees importante: Las entradas en.gitignorese procesan en orden, por lo que las entradas que se encuentran más abajo en el archivo pueden anular las que se encuentran arriba. - Los archivos ignorados no se eliminan del sistema de archivos: El archivo
.gitignoresolo evita que los archivos se agreguen al repositorio de Git. Los archivos ignorados todavía se almacenan en el sistema de archivos. - El archivo
.gitignorese aplica solo al repositorio actual: Si creas un nuevo repositorio, deberás agregar un archivo.gitignorepara ese repositorio específico. - Los archivos ignorados solo se ignoran después de un commit: Si agregas un archivo a
.gitignore, los archivos ya existentes en el repositorio no se ignorarán hasta que se realice un commit. - El archivo
.gitignoreno funciona para archivos que ya están en el repositorio: Si un archivo ya se encuentra en el repositorio de Git, el archivo.gitignoreno lo ignorará. Deberás eliminar manualmente el archivo del repositorio.
Conclusión
El archivo .gitignore es una herramienta esencial para cualquier usuario de Git que busca mantener un repositorio limpio y organizado. Al usar este archivo, puedes especificar qué archivos o carpetas deben ignorarse al rastrear un repositorio, lo que facilita la colaboración, la gestión de versiones y la seguridad de los datos.