Git ignora los archivos que no están en gitignore

117

Tengo un repositorio de git que ignora los archivos de imagen, así como algunos otros archivos, pero mi .gitignorearchivo solo lo tiene ignorando un config.phparchivo. ¿Hay algún archivo de ignorar global en algún lugar que parece que no puedo encontrar? Tengo que especificar archivos para agregarlos ahora, y me está dando esta advertencia:

Uno de sus archivos .gitignore ignora las siguientes rutas.

El contenido de mi ~/.gitconfigarchivo es solo mi dirección de correo electrónico.

Ian Hunter
fuente

Respuestas:

198

git check-ignore

Use el git check-ignorecomando para depurar su archivo gitignore (excluir archivos).

Por ejemplo:

$ git check-ignore -v config.php
.gitignore:2:src    config.php

La salida anterior detalla sobre el patrón coincidente (si lo hay) para cada nombre de ruta dado (incluida la línea).

Entonces, tal vez no se ignore su extensión de archivo, sino todo el directorio.

El formato devuelto es:

<source> <COLON> <linenum> <COLON> <pattern> <HT> <pathname>

O use el siguiente comando para imprimir su .gitignoreINICIO del usuario y la carpeta del repositorio:

cat ~/.gitignore "$(git rev-parse --show-toplevel)"/.gitignore "$(git rev-parse --show-toplevel)"/.git/info/exclude

Uso alternativo git add -fque permite agregar archivos que de otro modo se ignorarían.

Ver: man gitignore, man git-check-ignorepara más detalles.

Sintaxis

git check-ignore [opciones] nombre de ruta…

git check-ignore [opciones] --stdin

Kenorb
fuente
5
Esto es mucho mejor que la respuesta aceptada. No te ofendas, pero esto me salvó el día. Gracias Kenorb.
luanjunyi
1
Se merece más votos a favor. Descubrí que algunos gitignore extraños en algunas carpetas / vendor / causaron problemas con la última versión de git.
Manuel Arwed Schmidt
2
este me salvó hoy ... parece que Visual Studio creó un archivo llamado gitignore_global.txt en la carpeta de documentos de los usuarios y esto ignoraba archivos que no pude (des) ignorar
Samuel
1
Perfectamente resuelto mi problema. ¡Algunos patrones no son fáciles de captar a simple vista!
Willa
54

Puede ser bueno saber que su configuración de git puede contener un archivo core.excludesfile que es una ruta a un archivo con patrones adicionales que se ignoran. Puede averiguar si tiene dicha configuración ejecutando (en el problemático repositorio de git):

git config core.excludesfile

Si imprime una ruta de archivo, mire el contenido de ese archivo para obtener más información.

En mi caso, instalé git a través de una versión anterior de boxen que ignoró el patrón '¿Icono?' que en mi caso me dio la advertencia, mencionada en esta pregunta, para los iconos de una carpeta (estoy en un sistema de archivos que no distingue entre mayúsculas y minúsculas, por eso Icon? coincide con los iconos).

Gabriel
fuente
2
De hecho, este era mi problema. No estoy seguro de cómo o cuándo se edita este archivo, pero tenía el archivo que quería en la lista
toxaq
2
Gracias, me salvaste horas de pura agonía. En mi caso, fue la instalación del árbol de fuentes (una herramienta que visualiza el repositorio de git) que creó de forma poco lógica en la carpeta de documentos un gitignore_global.txt que incluía muchas exclusiones.
Objeto mecánico
Tuve ese mismo maldito Icon?ser ignorado.
Justin Skiles
Este fue mi caso. Tenía bastantes reglas dentro del archivo de ignorar global. Gracias por el consejo +1
Madness
Tenía * .json en mi ignorar global - hablar de una pesadilla - ¡gracias!
Jason Perfetto
31

Mira estos:

  1. ¿Ha buscado otros archivos .gitignore, ya que puede haber muchos de ellos?

  2. Además, mire REPO / .git / config para ver si hay algo allí.

  3. Repo exclude Las reglas locales por repositorio se pueden agregar al archivo .git / info / exclude en su repositorio. Estas reglas no están comprometidas con el repositorio, por lo que no se comparten con otros. Este método se puede utilizar para archivos generados localmente que no espera que otros usuarios generen, como archivos creados por su editor.

gahooa
fuente
No hay otros archivos .gitignore en el repositorio, ni hay nada en el archivo .git / config que ignore algo. ¿Cómo se configura .git / info / exclude?
Ian Hunter
4
No está claro por qué esta respuesta está marcada como respondida. ¿Cómo se resolvió exactamente este problema?
Siguiente desarrollador
excluir era mi problema. Sabía que había otra forma de ignorar, que había usado en el pasado, ¡pero olvidé dónde estaba!
Chucky
22

Tuve el mismo problema: git ignoraba un directorio con este error:

➭ git add app/views/admin/tags/
The following paths are ignored by one of your .gitignore files:
app/views/admin/tags
Use -f if you really want to add them.
fatal: no files added

Finalmente descubrí que mi problema era una línea en mi ~/.gitignore_global:

TAGS

que coincidía con el camino app/views/admin/tags. Lo arreglé agregando una barra inclinada al archivo global gitignore

/TAGS

y git comenzó a rastrear mi directorio nuevamente.

Shevaun
fuente
3
+1 por hacerme buscar coincidencias parciales ... gitignore_global.txt contenía "[Rr] elease * /", lo que provocaba que mi directorio "releasenotes" fuera ignorado.
Trev
Para hacerlo aún más difícil, git ignorará solo los archivos recién agregados, no los que ya estén en el repositorio. Entonces, cuando agregué "foo /" a mi .gitignore, ignoró solo los archivos recientemente agregados en los subdirectorios foo y no todos los archivos. Tardé una hora en averiguar por qué se ignoraban algunos archivos y otros no.
ccleve
Tengo el mismo problema. SourceTree establece el archivo ~ / .gitignore_global en el menú Herramientas-> Elemento Opciones-> pestaña Git. Después de limpiar el campo Global Ignore list, el comando "git add ..." funcionó.
Kate
Tuve el mismo problema. Tenía un helpdirectorio que estaba siendo ignorado. Afortunadamente encontré tu respuesta bastante rápido.
Abdul Sadik Yalcin
9

Para mí, accidentalmente tuve un comodín en mi archivo ~ / .gitignore_global. ¿Quizás comprobar allí?


fuente
1
Ese fue exactamente el problema para mí. Tenía * .png allí, no tengo idea de cómo llegó allí.
Shahar
3

Otra cosa para probar: tenía un directorio B con su propio .gitrepositorio anidado en el directorio A de mi proyecto (pero no como un submódulo). Hice algunos cambios en B y quería convertirlo en un submódulo de buena fe. Creo que git A ignoraba automáticamente B porque contenía su propio repositorio (ver ¿ Repositorios git anidados sin submódulos? ). Cambié el nombre de la carpeta B e intenté clonarla nuevamente como un submódulo, y eso me traía el mensaje de error engañoso "ignorado por .gitignore". La solución fue eliminar .gitde B.

Matt Montag
fuente
2

Estaba teniendo exactamente el mismo problema que tú. La única respuesta que recibió enumeró algunos lugares para verificar, pero ninguno de ellos resolvió el problema para mí, y de su comentario tampoco creo que para usted. No tenía OTROS archivos .gitignore escondidos más abajo en el árbol de directorios; nada en .git / config; nada en .git / ingore / exclude

Si aún tiene el problema, marque esta respuesta . Me resolvió el problema

Básicamente, busque un archivo ~ / .gitignore. El mío se llamaba ~ / .gitignore_global. No sé cuando fue creado ( que ciertamente no lo hacen), pero he intentado un montón de configuración de Git es diferente cuando por primera vez instalado, por lo que uno de ellos debe haber puesto ahí.

¡Espero que su respuesta también te ayude!

Bukov
fuente
1

Otra razón para recibir este mensaje de error de git es cuando se ejecuta el git submodule addcomando mientras un comando git anterior se bloqueó y dejó el archivo de bloqueo (esto puede suceder, por ejemplo, cuando usa scripts personalizados que incluyen comandos git y no ha notado el choque).

Si ejecuta el comando en su git commitlugar, mientras que ninguna de las condiciones ha cambiado ( git submodule addseguirá gritando que sus .gitignorearchivos son los culpables), verá otro informe de error en su lugar:

$ git commit -a
fatal: Unable to create '..../.git/index.lock': File exists.

If no other git process is currently running, this probably means a
git process crashed in this repository earlier. Make sure no other git
process is running and remove the file manually to continue.

y de hecho borrando el archivo de bloqueo:

rm .git/index.lock

resuelve el problema. (Esto sucede con la versión 2.1.0.9736 de git. Es posible que se solucione en futuras versiones de git).

Ger Hobbelt
fuente
Gracias, este resultó ser el problema que estaba teniendo. Salvavidas!
JDawgg
1

Comprueba que tienes permiso para acceder a la carpeta. Acabo de encontrarme con esto y fue porque la carpeta era propiedad del usuario de www-data, no del usuario con el que había iniciado sesión en el terminal.

Conrad Jones
fuente
1

En mi caso, fue la barra diagonal en mi camino la que causó el problema ...

No trabajo

/srv/bootstrap/

Trabajo

srv/bootstrap/
jwogrady
fuente
1

Una cosa más: si el directorio en el que se encuentra requiere acceso de root para escribir o ejecutar, asegúrese de estar en el usuario root. De hecho, recibí un error extraño en el que estaba tratando de agregar un submódulo y git seguía quejándose de que la ruta en la que estaba clonando estaba siendo ignorada por un archivo git ignore. Luego cambié a usuario root, volví a ejecutar el submódulo add y no hubo ningún problema.

Maharlikans
fuente
0

Compruebe también ~/.gitignorey ~/.gitignore_globalcuál podría ser creado por algunos clientes de Git (por ejemplo, Atlassian SourceTree en Mac OS X).

vivianteller
fuente
0

Asegúrese de que el .gitignorearchivo no se ignore a sí mismo. Un error común es agregar una *regla al .gitignorearchivo para ignorar todos los archivos de la carpeta actual. La solución a esto es agregar una excepción a .gitignore:

*
!.gitignore

De esta forma, se ignorarán todos los archivos del directorio, excepto .gitignore.

jfoliveira
fuente