2011-09-13 13 views
19

que tienen un determinado archivo en mi repo de haber puesto el bit sin cambios en asumir:¿Quién ha tocado mi git asumiendo, sin cambio?

git update-index --assume-unchanged someFile.txt 

De vez en cuando, después de algún trabajo en el repositorio, que poco no está definida y el archivo es automágicamente no assume-unchanged nunca más.

¿Quién lo toca? ¿Cómo puedo hacer esto permanente hasta que explícitamente digo a git a:

git update-index --no-assume-unchanged someFile.txt 

¿Qué está pasando aquí?


Editar: estoy usando el bit-asumir sin cambios en los archivos de configuración que cambian de forma local, y debe nunca ser comprometida, por no mencionar la empujó contra la corriente. No quiero verlos en git status, ni en ningún otro lado, a menos que explique explícitamente a git que deseo editar y confirmar uno de ellos.


Editar: OK, creo que he conseguido reproducir el problema.

Incurrí el archivo de un repositorio diferente (que no lo tenía como --assume-unchanged), sacó mi repositorio y, por supuesto, el bit se restableció.

Así surgen dos preguntas:

  1. ¿Es posible establecer este bit en el repositorio de autoridad central para que se propaga a todos los repositorios?
  2. ¿Es posible que este bit sea pegajoso, incluso después de cambios remotos en él?
+0

Creo que la función ha sido contemplada en la lista de git al menos una vez (al menos en el hilo mencionado por Mark a continuación). No obstante, no creo que nadie haya intervenido para implementarlo. –

+0

Encontré otro hilo relevante: http://thread.gmane.org/gmane.comp.version-control.git/146082 –

+0

No hay ningún repositorio autorizado: consulte mi pregunta similar aquí: http://stackoverflow.com/questions/ 25123374/stop-tracking-a-file-in-git-without-have-it-deleted-either-local-or-on-pul/25123571? Noredirect = 1 # y esta publicación de blog para git supone sin cambios vs skip worktree : fallengamer.livejournal.com/93321.html –

Respuesta

3

IIRC si ignora un archivo versionado, se comportará así. Puede ignorar todos los árboles de trabajo desde .gitignore o en particular árbol de trabajo desde .git/info/exclude (sí, funciona, pero no es la forma prevista de hacer las cosas).

+1

Ignorar un archivo de este tipo que es "precioso" puede ser peligroso. git considera los archivos ignorados como desechables, y puede sobrescribirlos al pasar de una versión a otra. (El mecanismo de ignorar está destinado a productos de construcción.) –

+0

Ignorar no es el problema. Ignorar es para archivos no versionados. Estoy hablando de '--assume-unchanged''ing para archivos versionados. –

+0

@Yuval: en realidad no, no solo. No estoy seguro de si es por diseño, efecto secundario de agregar semántica en git o por accidente, pero si un archivo versionado coincide con el patrón de ignorar, git ve el archivo, pero ignora los cambios realizados en él. En otras palabras, se comporta de manera similar a '--assume-unchanged'. –

1

Parece que --skip-worktree + salida dispersa podría permitir este tipo de comportamiento.

De git assume unchanged vs skip worktree - ignoring a symbolic link (con algunas modificaciones contextuales):

  • Conjunto core.sparseCheckout a cierto para el repositorio.
  • Cree un archivo .git/info/sparse-checkout que contenga dos patrones: * para incluir todo y !/path/to/someFile.txt para excluir el archivo local 'someFile.txt'.
  • Ahora, configure manualmente el bit skip-worktree en someFile.txt.

Ahora puede continuar sin tener que temer que git automáticamente confirmará el directorio, pero tenga en cuenta que aún se encontrará con problemas si alguien ejecuta explícitamente git add en el directorio o cualquier archivo que contenga.

investigación adicional en the man page parece indicar que --skip-worktree es más apropiado para el caso de uso que se le preguntó acerca.

Cuestiones relacionadas