Cómo excluir archivos solo de la carpeta raíz en Git

399

Soy consciente del uso de .gitignorearchivos para excluir algunos archivos que se agregan, pero tengo varios config.phparchivos en el árbol de origen y necesito excluir solo uno, ubicado en la raíz, mientras que otros se mantienen bajo control de revisión.

¿En qué debería escribir .gitignorepara que esto suceda?

Pavel Karoukin
fuente

Respuestas:

589

De la documentación :

Si el patrón no contiene una barra oblicua /, git lo trata como un patrón glob de shell y comprueba una coincidencia con el nombre de la ruta relativa a la ubicación del archivo .gitignore (en relación con el nivel superior del árbol de trabajo si no es de un .gitignore archivo).

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

Por lo tanto, debe agregar la siguiente línea a su raíz .gitignore:

/config.php
Manoj Govindan
fuente
1
¡Gracias! Lo intenté de esta manera, pero por alguna razón no funcionó. Probablemente mal escrito en alguna parte =)
Pavel Karoukin
1
¿Qué sucede si no es un archivo, sino una carpeta, y quiero ignorar esa carpeta en la raíz del repositorio, sus archivos contenidos y todas las subcarpetas descendientes y sus archivos? /folder/?
CodeManX el
11
Funcionaría /folder/o /folderfuncionaría, pero agregar la barra diagonal al final limita la coincidencia solo a las carpetas. Si tuviera un archivo llamado 'foo' en el directorio raíz, /foo/no lo ignoraría, pero lo /fooharía.
tehDorf
En caso de que ya haya confirmado el archivo, ejecute el comando git rm --cached <file>, de lo contrario el archivo no será ignorado. De: stackoverflow.com/a/1274447
Bruno Polo
83

Uso /config.php.

Richard Fearn
fuente
29

Las versiones anteriores de git requieren que primero defina un patrón de ignorar e inmediatamente (en la siguiente línea) defina la exclusión. [probado en la versión 1.9.3 (Apple Git-50)]

/config.php
!/*/config.php

Las versiones posteriores solo requieren lo siguiente [probado en la versión 2.2.1]

/config.php
kenhowardpdx
fuente
17

Si la solución anterior no funciona para usted, intente esto:

#1.1 Do NOT ignore file pattern in  any subdirectory
!*/config.php
#1.2 ...only ignore it in the current directory
/config.php

##########################

# 2.1 Ignore file pattern everywhere
config.php
# 2.2 ...but NOT in the current directory
!/config.php
drogo
fuente
Esto realmente funciona para mí, mientras que el /config.phpsolo no. Tengo curiosidad por qué no lo hizo. ¿Tienes una idea?
iago-lito 'considerando dejar el
@ iago-lito si trabajas en algún proyecto en particular y te cuesta cómo ignorar algún archivo.ext en algún directorio en particular y al mismo tiempo NO ignorarlo en ningún otro lugar, entonces pon esto en el archivo /home/me/.gitignore: /home/me/path/to/my/project/some/folder/file.ext O file.ext para ignorar el archivo en todas partes y luego en / home / me / path / to / my / project / some / folder / .gitignore file ponga este! file.ext para NO ignorar este archivo solo en este directorio en particular. Cada carpeta puede tener su propio archivo .gitignore para ANULAR cualquiera de las configuraciones principales de los archivos .gitignore ...
drugan
Hm. Esto significa que el repositorio puede comportarse de manera diferente dependiendo de si otros usuarios tienen ~/.gitignorearchivos diferentes en sus propias máquinas, ¿verdad? Además, mi punto fue: Usted escribió "Si la solución anterior no funciona", ¿por qué no?
iago-lito 'considerando dejar
Sí, si su proyecto puede existir en un entorno desconocido, nunca debe confiar en los archivos .gitignore que existen sobre la carpeta raíz del proyecto. Recuerde que el nombre de archivo como config.php es bastante común, así que anule cualquier configuración posiblemente existente para este archivo en su archivo raíz .gitignore.
drugan