Nombre

gitignore: especifica los archivos no rastreados intencionalmente para ignorarlos

Sinopsis

$ XDG_CONFIG_HOME / git / ignore, $ GIT_DIR / info / exclude, .gitignore

Descripción

A gitignore file especifica archivos sin seguimiento intencional que Git debe ignorar. Los archivos ya rastreados por Git no se ven afectados; consulte las NOTAS a continuación para obtener más detalles.

Cada línea en un gitignore archivo especifica un patrón. Al decidir si ignorar una ruta, Git normalmente verifica gitignore patrones de múltiples fuentes, con el siguiente orden de precedencia, de mayor a menor (dentro de un nivel de precedencia, el último patrón coincidente decide el resultado):

  • Los patrones se leen desde la línea de comandos para aquellos comandos que los admiten.

  • Patrones leídos de un .gitignore archivo en el mismo directorio que la ruta, o en cualquier directorio padre, con patrones en los archivos de nivel superior (hasta el nivel superior del árbol de trabajo) siendo anulados por aquellos en archivos de nivel inferior hasta el directorio que contiene el archivo. Estos patrones coinciden en relación con la ubicación del .gitignore expediente. Un proyecto normalmente incluye tales .gitignore archivos en su repositorio, que contienen patrones para archivos generados como parte de la compilación del proyecto.

  • Patrones leídos de $GIT_DIR/info/exclude.

  • Patrones leídos del archivo especificado por la variable de configuración core.excludesFile.

El archivo en el que colocar un patrón depende de cómo se vaya a utilizar el patrón.

  • Los patrones que deben ser controlados por versión y distribuidos a otros repositorios a través de un clon (es decir, archivos que todos los desarrolladores querrán ignorar) deben ir a un .gitignore expediente.

  • Los patrones que son específicos de un repositorio en particular pero que no necesitan ser compartidos con otros repositorios relacionados (por ejemplo, archivos auxiliares que viven dentro del repositorio pero son específicos del flujo de trabajo de un usuario) deben ir al $GIT_DIR/info/exclude expediente.

  • Los patrones que un usuario quiere que Git ignore en todas las situaciones (por ejemplo, copias de seguridad o archivos temporales generados por el editor de elección del usuario) generalmente van a un archivo especificado por core.excludesFile en el usuario ~/.gitconfig. Su valor predeterminado es $ XDG_CONFIG_HOME / git / ignore. Si $ XDG_CONFIG_HOME no está configurado o está vacío, se usa $ HOME / .config / git / ignore en su lugar.

Las herramientas de plomería de Git subyacentes, como git ls-files y git read-tree, leer gitignore patrones especificados por las opciones de la línea de comandos, o de archivos especificados por las opciones de la línea de comandos. Herramientas de Git de nivel superior, como git status y git add, utilice patrones de las fuentes especificadas anteriormente.

Formato de patrón

  • Una línea en blanco no coincide con ningún archivo, por lo que puede servir como separador para facilitar la lectura.

  • Una línea que comienza con # sirve como comentario. Ponga una barra invertida (““) delante del primer hash para los patrones que comienzan con un hash.

  • Los espacios finales se ignoran a menos que estén entrecomillados con barra invertida (““).

  • Un prefijo opcional “!“que niega el patrón; cualquier archivo coincidente excluido por un patrón anterior se volverá a incluir. No es posible volver a incluir un archivo si se excluye un directorio principal de ese archivo. Git no enumera los directorios excluidos por razones de rendimiento, por lo que los patrones de los archivos contenidos no tienen ningún efecto, sin importar dónde estén definidos. Coloque una barra invertida (““) delante del primero”!“para patrones que comienzan con un literal”!“, por ejemplo, “!important!.txt“.

  • La barra / se utiliza como separador de directorios. Los separadores pueden ocurrir al principio, en la mitad o al final del .gitignore patrón de búsqueda.

  • Si hay un separador al principio o en el medio (o ambos) del patrón, entonces el patrón es relativo al nivel de directorio del .gitignore archivo en sí. De lo contrario, el patrón también puede coincidir en cualquier nivel por debajo del .gitignore nivel.

  • Si hay un separador al final del patrón, el patrón solo coincidirá con los directorios; de lo contrario, el patrón puede coincidir con archivos y directorios.

  • Por ejemplo, un patrón doc/frotz/ partidos doc/frotz directorio, pero no a/doc/frotz directorio; sin embargo frotz/ partidos frotz y a/frotz que es un directorio (todas las rutas son relativas a la .gitignore expediente).

  • Un asterisco “*“coincide con cualquier cosa excepto con una barra oblicua. El carácter”?“coincide con cualquier carácter excepto”/“. La notación de rango, p. Ej. [a-zA-Z], se puede utilizar para hacer coincidir uno de los caracteres de un rango. Consulte fnmatch (3) y el indicador FNM_PATHNAME para obtener una descripción más detallada.

Dos asteriscos consecutivos (“**“) en patrones que coinciden con el nombre de ruta completo pueden tener un significado especial:

  • Un liderazgo “**“seguido de una barra inclinada significa que coinciden en todos los directorios. Por ejemplo,”**/foo“coincide con el archivo o directorio”foo“en cualquier lugar, igual que el patrón”foo“.”**/foo/bar“coincide con el archivo o directorio”bar“en cualquier lugar que esté directamente debajo del directorio”foo“.

  • Un final “/**“coincide con todo lo que hay dentro. Por ejemplo,”abc/**“coincide con todos los archivos dentro del directorio”abc“, relativo a la ubicación del .gitignore archivo, con infinita profundidad.

  • Una barra seguida de dos asteriscos consecutivos y luego una barra que coincide con cero o más directorios. Por ejemplo, “a/**/b” partidos “a/b“,”a/x/b“,”a/x/y/b” etcétera.

  • Otros asteriscos consecutivos se consideran asteriscos regulares y coincidirán de acuerdo con las reglas anteriores.

Configuración

La variable de configuración opcional core.excludesFile indica una ruta a un archivo que contiene patrones de nombres de archivo para excluir, similar a $GIT_DIR/info/exclude. Los patrones del archivo de exclusión se utilizan además de los de $GIT_DIR/info/exclude.

Notas

El propósito de los archivos gitignore es garantizar que ciertos archivos no rastreados por Git permanezcan sin rastrear.

Para dejar de rastrear un archivo que se rastrea actualmente, use git rm --cached.

Ejemplos de

  • El patrón hello.* coincide con cualquier archivo o carpeta cuyo nombre comience con hello. Si uno quiere restringir esto solo al directorio y no a sus subdirectorios, puede anteponer el patrón con una barra, es decir /hello.*; el patrón ahora coincide hello.txt, hello.c pero no a/hello.java.

  • El patrón foo/ coincidirá con un directorio foo y rutas debajo de él, pero no coincidirá con un archivo normal o un enlace simbólico foo (esto es consistente con la forma en que funciona pathpec en general en Git)

  • El patrón doc/frotz y /doc/frotz tienen el mismo efecto en cualquier .gitignore expediente. En otras palabras, una barra inclinada al principio no es relevante si ya hay una barra central en el patrón.

  • El patrón “foo / *”, coincide con “foo / test.json” (un archivo normal), “foo / bar” (un directorio), pero no coincide con “foo / bar / hello.c” (un archivo normal ), ya que el asterisco en el patrón no coincide con “bar / hello.c” que tiene una barra.

    $ git status
    [...]
    # Untracked files:
    [...]
    #       Documentation/foo.html
    #       Documentation/gitignore.html
    #       file.o
    #       lib.a
    #       src/internal.o
    [...]
    $ cat .git/info/exclude
    # ignore objects and archives, anywhere in the tree.
    *.[oa]
    $ cat Documentation/.gitignore
    # ignore generated html files,
    *.html
    # except foo.html which is maintained by hand
    !foo.html
    $ git status
    [...]
    # Untracked files:
    [...]
    #       Documentation/foo.html
    [...]

Otro ejemplo:

    $ cat .gitignore
    vmlinux*
    $ ls arch/foo/kernel/vm*
    arch/foo/kernel/vmlinux.lds.S
    $ echo '!/vmlinux*' >arch/foo/kernel/.gitignore

El segundo .gitignore evita que Git ignore arch/foo/kernel/vmlinux.lds.S.

Ejemplo para excluir todo excepto un directorio específico foo/bar (nota la /* – sin la barra, el comodín también excluiría todo dentro foo/bar):

    $ cat .gitignore
    # exclude everything except directory foo/bar
    /*
    !/foo
    /foo/*
    !/foo/bar

Ver también

git-rm[1], gitrepository-layout[5], git-check-ignore[1]