Git: Ignorar archivos rastreados

181

Tengo algunos archivos rastreados en un repositorio que se modifican automáticamente al compilar el código. No quiero destrabarlos, simplemente no quiero que aparezcan como modificados y no quiero que se pongan en escena cuando agregue git.

es posible?

haymansfield
fuente
77
posible duplicado de git: ¿puedo confirmar un archivo e ignorar los cambios de contenido?
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功
55
Si la compilación genera estos archivos automáticamente , entonces no deberían rastrearse en git.
Codebling
Aquí hay un tutorial rápido sobre gitignore que puede ser útil: learningpassion.wordpress.com/2016/06/17/…
bromista

Respuestas:

282

Por supuesto.

git update-index --assume-unchanged [<file> ...]

Para deshacer y comenzar a rastrear nuevamente:

git update-index --no-assume-unchanged [<file> ...]
Nick Veys
fuente
3
¿Qué sucede con los archivos en este estado cuando hago modificaciones en ellos?
haymansfield
2
@haymansfield la página de ayuda para el comando dice lo siguienteGit will fail (gracefully) in case it needs to modify this file in the index e.g. when merging in a commit; thus, in case the assumed-untracked file is changed upstream, you will need to handle the situation manually.
Parham
3
¿Alguna forma de solicitar --assume-unchangedla clonación? Para que todos los usuarios tengan los archivos, pero no vean cambios locales en ellos en diffs.
Gauthier
10
@Tyler: no, una vez que un archivo es rastreado por git, siempre será rastreado, incluso si ese archivo aparece en un .gitignore. Mi caso de uso es algo así como "aquí hay una plantilla base de un archivo en el que almacenarías tus credenciales, ahora nunca las confirmes".
Jon V
55
@watbywbarif Tengo el comando git update-index --no-assume-unchanged $(git ls-files $(git rev-parse --show-toplevel))establecido como un alias git. Cada vez que sospecho que son algunas de estas travesuras, simplemente hago eso.
Philippe Carphin
6

Otro enfoque (de una respuesta ahora eliminada por Seth Robertson, pero lo encontré útil para resucitarlo) es mantener un archivo de plantilla "rastreado", luego tener una versión local no rastreada, por ejemplo: "config.sample.ini" o " config.ini.template "consulte https://gist.github.com/canton7/1423106 para ver un ejemplo completo.

Entonces no habrá ninguna preocupación si el archivo se cambia dentro de git, etc. y puede usar .gitignore (finalmente) en los archivos locales no rastreados.

rogerdpack
fuente
5

Otra solución que usa atributos git y% f en el comando de filtro:

git config filter.orig.clean "cat %f.orig"
cp filename filename.orig
echo "filename filter=orig" >> .git/info/attributes
echo "filename.orig" >> .git/info/exclude
koct9i
fuente
16
¿Podría dar más detalles sobre lo que esto significa y lo que está haciendo por casualidad?
rogerdpack
esto agrega un filtro para el archivo que lee el contenido del archivo ".orig" que tiene texto original
koct9i