Close

git ignore

Git ve cada archivo de tu copia de trabajo de una de las siguientes maneras:

1. Con seguimiento: Un archivo que se ha preparado o confirmado previamente.

2. Sin seguimiento: Un archivo que no se ha preparado o confirmado.

3. Ignorado: Un archivo que se le ha indicado explícitamente a Git que ignore.

Los archivos ignorados suelen ser artefactos de compilación y archivos generados por el equipo que pueden derivarse de tu fuente de repositorios o que no deberían confirmarse por algún otro motivo. Estos son algunos ejemplos habituales:

  • Cachés de dependencias, como es el caso del contenido de /node_modules o /packages.
  • Código compilado como, por ejemplo, los archivos .o, .pyc y .class.
  • Directorios de salida de compilación, como es el caso de /bin, /out o /target.
  • Archivos generados en tiempo de ejecución como, por ejemplo, .log, .lock o .tmp.
  • Archivos ocultos del sistema, como es el caso de .DS_Store o Thumbs.db.
  • Archivos personales de configuración de IDE como, por ejemplo, .idea/workspace.xml.

A los archivos ignorados se les hace un seguimiento en un archivo especial llamado .gitignore que se incorpora en la raíz de tu repositorio. En Git no hay ningún comando explícito para ignorar archivos: en su lugar, cuando tengas nuevos archivos que quieras ignorar, deberás editar y confirmar manualmente el archivo .gitignore. Los archivos .gitignore contienen patrones que establecen coincidencias con los nombres de archivo de tu repositorio para determinar si deberían ignorarse o no.


Patrones de git ignore


Los archivos .gitignore usan patrones globales para el establecimiento de coincidencias con los nombres de los archivos. Puedes crear tus patrones con varios símbolos:

Patrón

Coincidencias de ejemplo

Explicación*

**/logs

Coincidencias de ejemplo

logs/debug.log
logs/monday/foo.bar
build/logs/debug.log

Explicación*

Puedes anteponer dos asteriscos a un patrón para que coincida con directorios situados en cualquier lugar del repositorio.

**/logs/debug.log

Coincidencias de ejemplo

logs/debug.log
build/logs/debug.log
but not
logs/build/debug.log

Explicación*

También puedes utilizar dos asteriscos para que coincida con distintos archivos en función de su nombre y el nombre de su directorio principal.

.log

Coincidencias de ejemplo

debug.log
foo.log
.log
logs/debug.log

Explicación*

Un asterisco es un carácter comodín que coincide con cero o más caracteres.

*.log
!important.log

Coincidencias de ejemplo

debug.log
but not
logs/debug.log

Explicación*

Si antepones un signo de exclamación a un patrón, este se anula. Si un archivo coincide con un patrón, pero también con un patrón de anulación definido más adelante en el archivo, no se ignorará.

/debug.log

Coincidencias de ejemplo

debug.log
but not
logs/debug.log

Explicación*

Los patrones definidos después de un patrón de anulación volverán a ignorar los archivos previamente anulados.

debug.log

Coincidencias de ejemplo

debug.log
logs/debug.log

Explicación*

Si antepones una barra oblicua, el patrón coincidirá únicamente con archivos de la raíz del repositorio.

debug?.log

Coincidencias de ejemplo

debug0.log
debugg.log
but not
debug10.log

Explicación*

Un signo de interrogación hace que la coincidencia sea exactamente de un carácter.

debug[0-9].log

Coincidencias de ejemplo

debug0.log
debug1.log
but not
debug10.log

Explicación*

También se pueden emplear corchetes para que la coincidencia sea de un solo carácter de un intervalo especificado.

debug[01].log

Coincidencias de ejemplo

debug0.log
debug1.log
but not
debug2.log
debug01.log

Explicación*

Los corchetes hacen que la coincidencia sea de un solo carácter del conjunto especificado.

debug[!01].log

Coincidencias de ejemplo

debug2.log
but not
debug0.log
debug1.log
debug01.log

Explicación*

Se puede utilizar un signo de exclamación para que el patrón coincida con cualquier carácter, excepto uno del conjunto especificado.

debug[a-z].log

Coincidencias de ejemplo

debuga.log
debugb.log
but not
debug1.log

Explicación*

Los intervalos pueden ser numéricos o alfabéticos.

logs

Coincidencias de ejemplo

logs
logs/debug.log
logs/latest/foo.bar
build/logs
build/logs/debug.log

Explicación*

Si no añades una barra oblicua, el patrón coincidirá tanto con los archivos como con el contenido de los directorios que lleven ese nombre. En las coincidencias de ejemplo de la izquierda, se ignoran los directorios y los archivos con el nombre logs.

logs/

Coincidencias de ejemplo

logs/debug.log
logs/latest/foo.bar
build/logs/foo.bar
build/logs/latest/debug.log

Explicación*

Al añadir una barra oblicua, se indica que el patrón es un directorio. Se ignorará todo el contenido de cualquier directorio del repositorio que coincida con ese nombre, incluidos todos sus archivos y subdirectorios.

logs/
!logs/important.log

Coincidencias de ejemplo

logs/debug.log
logs/important.log

Explicación*

¡Un momento! ¿No debería anularse logs/important.log en el ejemplo de la izquierda?

No. A causa de una peculiaridad relacionada con el funcionamiento de Git, no puedes anular un archivo que se ha ignorado debido a un patrón que coincide con un directorio.

logs/**/debug.log

Coincidencias de ejemplo

logs/debug.log
logs/monday/debug.log
logs/monday/pm/debug.log

Explicación*

Usar dos asteriscos hace que la coincidencia sea de cero o más directorios.

logs/*day/debug.log

Coincidencias de ejemplo

logs/monday/debug.log
logs/tuesday/debug.log
but not
logs/latest/debug.log

Explicación*

También pueden usarse caracteres comodín en los nombres de los directorios.

logs/debug.log

Coincidencias de ejemplo

logs/debug.log
but not
debug.log
build/logs/debug.log

Explicación*

Los patrones que especifican un archivo de un directorio en particular están relacionados con la raíz del repositorio. (Puedes anteponer una barra oblicua si quieres, pero no sucederá nada en especial).

** En estas explicaciones, se asume que tu archivo .gitignore está en el directorio de nivel superior de tu repositorio, como es habitual. Si el repositorio tiene varios archivos .gitignore, tan solo tienes que reemplazar mentalmente "raíz del repositorio" por "directorio que contiene el archivo .gitignore" (y considera la posibilidad de unificarlos para facilitarle el trabajo a tu equipo).*

Además de estos caracteres, puedes utilizar # para incluir comentarios en tu archivo .gitignore:

# ignore all logs
*.log

Puedes usar la barra oblicua invertida (\) para escapar los caracteres de un patrón de .gitignore si tienes archivos o directorios que los contengan:

# ignore the file literally named foo[01].txt
foo\[01\].txt
rama de git
Material relacionado

rama de git

Logotipo de Bitbucket
VER LA SOLUCIÓN

Aprende a usar Git con Bitbucket Cloud

Archivos .gitignore compartidos en tu repositorio


Las reglas de ignoración de Git suelen definirse en un archivo .gitignore ubicado en la raíz de tu repositorio. Sin embargo, puedes optar por definir varios archivos .gitignore en distintos directorios del repositorio. Cada patrón de un archivo .gitignore concreto se comprueba en relación con el directorio que contiene ese archivo. No obstante, lo habitual, y el enfoque más simple, es definir un solo archivo .gitignore en la raíz. Cuando el archivo .gitignore se incorpora, se le realiza un control de versiones como con cualquier otro archivo del repositorio y se comparte con tus compañeros de equipo al enviarlo. Por lo general, solo debes incluir patrones en los archivos .gitignore que beneficiarán a otros usuarios del repositorio.

Reglas personales de git ignore


También puedes definir patrones personales de ignoración de Git para un repositorio concreto en un archivo especial en .git/info/exclude. Además de no aplicárseles el control de versiones, tampoco se distribuyen con tu repositorio, por lo que es un lugar adecuado para incluir patrones que probablemente solo te beneficien a ti. Por ejemplo, si tienes una configuración de inicio de sesión personalizada o herramientas especiales de desarrollo que generan archivos en el directorio de trabajo de tu repositorio, podrías plantearte la posibilidad de añadirlos a .git/info/exclude para evitar que se confirmen por accidente en el repositorio.

Reglas globales de git ignore


Asimismo, puedes definir patrones globales de ignoración de Git para todos los repositorios de tu sistema local. Para ello, basta con establecer la propiedad core.excludesFile de Git. Tendrás que crear este archivo por ti mismo. Si no tienes claro dónde colocar el archivo .gitignore global, una buena opción es tu directorio principal (además, luego te resultará más sencillo encontrarlo). En cuanto hayas creado el archivo, deberás configurar su ubicación con git config:

$ touch ~/.gitignore
$ git config --global core.excludesFile ~/.gitignore

Debes tener cuidado con los patrones que eliges ignorar de manera global, ya que los distintos tipos de archivos son pertinentes para proyectos diferentes. Los archivos especiales del sistema operativo (como .DS_Store y thumbs.db) o los archivos temporales creados por algunas herramientas para desarrolladores son candidatos típicos para ignorarse globalmente.

Omisión de un archivo previamente confirmado


Si quieres ignorar un archivo que has confirmado en el pasado, deberás eliminarlo de tu repositorio y, a continuación, añadirle una regla de .gitignore. Al usar la opción --cached con git rm, el archivo se eliminará del repositorio, pero permanecerá en tu directorio de trabajo como archivo ignorado.

$ echo debug.log >> .gitignore
  
$ git rm --cached debug.log
rm 'debug.log'
  
$ git commit -m "Start ignoring debug.log"

Puedes omitir la opción --cached si quieres eliminar el archivo tanto del repositorio como de tu sistema de archivos local.

Confirmación de un archivo ignorado


Se puede forzar la confirmación de un archivo ignorado en el repositorio mediante la opción -f (o --force) con git add:

$ cat .gitignore
*.log
  
$ git add -f debug.log
  
$ git commit -m "Force adding debug.log"

Puedes plantearte hacer esto si tienes definido un patrón general (como *.log), pero quieres confirmar un archivo específico. Sin embargo, es mejor definir una excepción a la regla general:

$ echo !debug.log >> .gitignore
  
$ cat .gitignore
*.log
!debug.log
  
$ git add debug.log
  
$ git commit -m "Adding debug.log"

Este enfoque es más obvio y menos confuso para tus compañeros de equipo.

Almacenamiento de un archivo ignorado


El comando git stash es una potente función de Git para guardar temporalmente cambios locales y revertirlos, lo que te permite volver a aplicarlos más tarde. Como cabría esperar, de forma predeterminada, git stash ignora los archivos ignorados y solo almacena en stash los cambios de los archivos de los que Git hace un seguimiento. Sin embargo, puedes invocar git stash con la opción --all para guardar en el stash también los cambios de los archivos ignorados y sin seguimiento.

Depuración de archivos .gitignore


Si tienes patrones de .gitignore complicados o patrones repartidos por varios archivos .gitignore, puede resultar difícil averiguar el motivo por el que se ignora un archivo concreto. Puedes usar el comando git check-ignore con la opción -v (o --verbose) para determinar qué patrón está provocando que se ignore un archivo en particular:

$ git check-ignore -v debug.log
.gitignore:3:*.log  debug.log

La salida muestra lo siguiente:

<file containing the pattern> : <line number of the pattern> : <pattern>    <file name>

Puedes incluir varios nombres de archivos en git check-ignore si quieres; no es necesario que los nombres se correspondan con los archivos que haya en tu repositorio.


Compartir este artículo

Lecturas recomendadas

Consulta estos recursos para conocer los tipos de equipos de DevOps o para estar al tanto de las novedades sobre DevOps en Atlassian.

Gente que colabora utilizando un muro lleno de herramientas

Blog de Bitbucket

Ilustración de Devops

Ruta de aprendizaje de DevOps

Demostraciones de funciones con expertos de Atlassian del Centro de demostraciones

Cómo funciona Bitbucket Cloud con Atlassian Open DevOps

Suscríbete para recibir el boletín de DevOps

Thank you for signing up