2012-06-20 16 views
48

Tengo un sitio que tiene un directorio /sites/default/files/ donde generalmente se guarda el contenido del usuario. Suponiendo que no necesito hacer un seguimiento de esto, agregué/sites/default/files/a mi archivo .gitignore.Problemas para ignorar archivos previamente ignorados en Git repo

Luego descubrí que también quería mantener algunas cargas mayormente permanentes en ese directorio también. Ahora tiene más sentido rastrear todo en/sites/default/files/y excluir subdirectorios indeseables, en lugar de hacerlo al revés.

El problema es que Git no dejará de ignorar ese directorio. He eliminado las líneas de .gitignore que especifican este directorio y no lo rastrearán. Tengo la opción de usar git add /sites/default/files/ -f para forzar a git a rastrear el directorio, pero lo he hecho antes y parece desordenado.

Si .gitignore ya no especifica ese directorio como ignorado, ¿por qué tendría que forzar a Git para que comience a rastrear esos archivos?

+1

¿Tiene por casualidad submódulos en uso?Tal vez sitios/o sitios/por defecto/o incluso sitios/por defecto/archivos /? También verifique cada uno de esos tres directorios específicamente para un archivo .gitignore. También puede probar 'git add -f sites/default/files/*' para agregar los archivos específicos, en lugar de agregar el directorio. – twalberg

+0

no, no hay submódulos (no los conocía, pero los recordará para uso futuro - gracias). Comprobó dos veces todos los directorios para obtener más archivos .gitignore, nada. Y tratar de 'git add -f sites/default/files/*' no lo hizo: cuando 'touch sites/default/files/test.mine' git aún no lo ve. – doub1ejack

+1

Hmmm ... bueno, ¿estás seguro de que no hay otras entradas en '.gitignore' que coincidan con eso, algún comodín de algún tipo o algo así? ¿O algo que haría que los archivos individuales sean ignorados, como un '* .pyc', y ese directorio solo contenga los archivos' .pyc'? Recuerde que nombrar 'file' en' .gitignore' también coincide con cualquier 'subdirectory/file' o' sub/subdir/file' ... – twalberg

Respuesta

4

Para la posteridad: la respuesta a mi problema fue "solo mire más de cerca".

@twalberg señaló, correctamente, que podría haber una regla que estaba pasando por alto en el archivo .gitignore. La manera en cascada en la que se aplican las reglas .gitignore hace que sea más fácil excluir los archivos de forma más amplia de lo previsto.

Por lo que puedo decir, las suposiciones que hacía sobre cómo funcionaba git eran correctas. Del mismo modo, mi caso no parece apoyar (o desmentir) los comentarios de @ J-16 SDiZ sobre qué papel puede jugar el bit assume-unchanged.

48

Ya sabes cómo hacerlo. Sí, git add -f es el camino.

Si pregunta por qué ... esto es porque git configuró un bit de assume-unchanged internamente. Este bit hace que git piense que el archivo no está modificado, por lo que git add no lo agregará.

Si quiere meterse con los detalles de implementación, puede usar el comando git update-index --no-assume-unchanged <file>.

+0

Entonces, presumiblemente, cuando obligo a git a agregar estos archivos y enviarlos a nuestro repositorio de desarrollo, todos nuestros otros desarrolladores comenzarán a rastrearlos también, ¿no? Tengo problemas para ver cómo funciona eso cuando sus propios archivos .gitignore ignoran los archivos que se extraen del dev repos (hasta que actualicen sus archivos locales .gitignore), pero estoy bien solo confiando en git en este. . – doub1ejack

+0

su '.gitignore' debe estar en control de versiones. Otro desarrollador debería obtenerlo cuando se actualicen. –

+0

Así es, deberían hacerlo. Sin embargo, los cambios en mi archivo .gitignore no resolvieron el problema, así que me pregunto si cada uno de los otros desarrolladores tendrá que usar esta misma corrección '-f' en sus repositorios locales. – doub1ejack

9

No creo que J-16 sea correcto. De http://www.kernel.org/pub/software/scm/git/docs/git-add.html:

El comando git add no agregará archivos ignorados por defecto. Si cualquier archivo ignorado se especificó explícitamente en la línea de comando, git add fallará con una lista de archivos ignorados. Los archivos ignorados alcanzados por recursión de directorio o globbing de nombre de archivo realizados por Git (cita tus globos antes del shell) se ignorarán en silencio. El comando git add se puede usar para agregar archivos ignorados con la opción -f (forzar).

git add -f parece ser sólo para añadir un archivo que hace existen en un archivo de ignorar alguna parte.

Quizás haya otro archivo .gitignore en/sites o/sites/default que también indique a Git que ignore este directorio, o tal vez se haya configurado en .git/info/exclude?

+0

No, solo tengo el archivo .gitignore y el archivo de exclusión está vacío. – doub1ejack

+0

¿Me falta algo entonces? Intenté reproducir tu situación (http://pastebin.com/wZB6F8Qj) y después de editar .gitignore, el archivo vuelve a aparecer como no rastreado, y funciona 'git add file'. – hdgarrood

+0

Estoy comenzando a preguntarme también ... después de usar -f para obligar a git a agregar un directorio si, de nuevo, hago un git 'agregar' git me dice que el directorio es ignorado por uno de mis archivos .gitignore. Busqué en el repositorio local para .gitignore y solo encontré uno y abrí el archivo de exclusión y verifiqué que no estaba interfiriendo. ¿Me estoy perdiendo de algo? – doub1ejack

1

Tuvimos un problema muy similar en nuestro directorio de sitios de Drupal. El problema es que Drupal distribución tiene un archivo .gitignore en el directorio de nivel superior drupal que coincide con cualquier cosa en drupal/sites/files/*

Cuestiones relacionadas