usar tag subfolders node_modules crear como and git gitignore

tag - gitignore folder and subfolders



Cuándo usar barra diagonal en gitignore (2)

Has respondido tu propia pregunta por completo. Si miras el repositorio de github / gitignore más de cerca, verás que la mayoría de los archivos usan reglas inconsistentes sobre cómo se escriben los patrones; es muy probable que la mayoría haya sido aportada por personas que no se molestaron en leer la documentación ni probar cosas como lo hizo usted.

Entonces, si eso ayuda: tienes razón, ten confianza.

Si ve errores en proyectos colaborativos como este, no dude en contribuir con sus conocimientos. Incluso hay algún precedente si necesitas aumentar tu confianza aún más.

Estoy tratando de entender más claramente la sintaxis de .gitignore , y en particular en lo que respecta a https://github.com/github/gitignore gitignores.

Veo que la barra diagonal inicial se usa para hacer coincidir solo nombres de ruta relativos a la ubicación del archivo .gitignore (desde http://git-scm.com/docs/gitignore ):

Una barra diagonal inicial coincide con el comienzo de la ruta de acceso. Por ejemplo, "/*.c" coincide con "cat-file.c" pero no con "mozilla-sha1 / sha1.c".

Pero, ¿qué sucede cuando elimino la barra inicial? En cuanto a lo que entendí, hay dos casos:

  1. Si el patrón no contiene una barra (o contiene solo una barra inclinada, lo que significa que debe coincidir con un directorio), la búsqueda se realiza dentro de todo el árbol de directorios. Por ejemplo, el patrón dir/ coincidirá con <root>/dir , <root>/a/dir , <root>/a/b/c/.../dir , etc., donde <root> es la ubicación de el archivo .gitignore .
  2. Si el patrón contiene una barra inclinada, que no está en la posición final (no es el último carácter), solo se .gitignore con las .gitignore relacionadas con la ubicación del archivo .gitignore .

Estos son los ejemplos que hice para verificar este comportamiento:

# Directory structure: <root> |- dir/ | |- test |- src/ | |- dir/ | | |- test test file is there only because Git does not track empty directories.

Primer examen:

# .gitignore dir/ # git status nothing to commit

Entonces Git está ignorando ambos directorios dir . Esto es coherente con el caso número 1: el patrón no tiene barras (excepto la posterior), por lo que Git está mirando todo el árbol de directorios, ignorando todo lo que coincide con el patrón.

Segunda prueba:

# .gitignore /dir/ # git status Untracked files: src/

Aquí, Git ignora solo el directorio dir directamente debajo del directorio raíz, gracias a la barra diagonal en el patrón.

Tercera prueba:

# .gitignore dir/* # git status Untracked files: src/

Esto es coherente con el caso número 2: el patrón tiene una barra en su interior, por lo que se considera como una ruta que comienza en el directorio raíz.

Ahora es el momento de la verdadera pregunta. Consideremos este archivo de gitignore : cuando ignoran el downloader/ directorios downloader/ , por ejemplo, ¿no están ignorando realmente cada uno de los directorios downloader encuentran en todo el árbol de directorios? Esto es lo que tengo que pensar desde que vi lo que hizo Git antes.

Entonces, si tengo un módulo personalizado con un directorio de downloader dentro, ¿se ignorará de forma inesperada, así como el habitual en la raíz de Magento? Esta es una pregunta un poco retórica porque en realidad ya me sucedió a mí, produciendo un error realmente difícil de encontrar.

Por lo tanto, en el archivo .gitignore Magento (al que me refiero solo como un ejemplo, por cierto), muchos de los patrones contienen barras, por lo que se corresponden correctamente con nombres de rutas que comienzan en la raíz, pero hay algunos casos, como downloader/ o errors/ que, si no me equivoco, son potencialmente peligrosos, y que probablemente deberían cambiarse a /downloader/ y /errors/ .

Como una pregunta más general, ¿debo usar siempre la barra diagonal para los patrones que no contienen barras (excepto la del final) cuando quiero seleccionar una ruta que empiece explícitamente desde la raíz y no para patrones que contengan barras diagonales, o debería siempre use la barra diagonal para mayor claridad? ¿Qué piensa usted al respecto?

Gracias por leer y lo siento por la publicación larga.


Solo quería resumir para una posible referencia futura: la barra diagonal ancla la coincidencia con la raíz. Por lo tanto, en el siguiente ejemplo, sin la barra inclinada, el comodín también excluiría todo dentro de foo porque tomaría * y se movería recursivamente hacia abajo del árbol. Sin embargo, con /* , excluye todo excepto la carpeta foo y su contenido:

$ cat .gitignore /* !/foo