¿Cómo ignorar los archivos que están en el repositorio?

93

Tengo un archivo (config.php), que ya está comprometido con el repositorio de Git, pero quiero ignorarlo localmente, es decir, quiero que ese archivo permanezca en el repositorio, pero obligo a Git a ignorar cualquier cambio.

Puse el archivo en .gitignore, pero todavía está marcado como cambiado y Git todavía está intentando realizar cambios en él, cada vez que confirmo algo. Alguna idea, ¿qué me estoy perdiendo o haciendo mal?

prcaen
fuente
agregue su archivo .gitignore; de ​​esa manera, podríamos ver cualquier problema al respecto.
Lars

Respuestas:

189

Si el archivo todavía se muestra en el estado, aunque esté en .gitignore, asegúrese de que no se haya realizado un seguimiento.

git rm --cached config.php

Si solo desea ignorarlo localmente, también puede hacer que el estado de git lo ignore:

git update-index --assume-unchanged config.php
VonC
fuente
1
OK gracias ! Si fusiono mi rama con otra, ¿este archivo puede causar algunos problemas?
prcaen
1
@ Nimbus147: no debería ser un problema, y ​​cualquier cambio en ese archivo se ignorará (es decir, no se agregará / confirmará).
VonC
si usa SmartGit, debe usar remove para hacer esto.
Omid-RH
1
¿Hay alguna forma de forzar update-index --assume-unchangedla rama remota? Me gustaría mantener el archivo en el repositorio, pero no puedo ser cambiado por otros, pero además no estoy disponible para la etapa.
p014k
1
@ p014k No que yo sepa. Para ese tipo de archivo, lo mantengo versionado con un nombre diferente, luego uso un controlador de archivo de contenido para generar automáticamente el archivo correcto (privado) cuando sea necesario. Ese filtro no estaría activo en el escenario, por ejemplo. Consulte stackoverflow.com/a/54454356/6309 y su enlace asociado.
VonC
6

Ignorar archivo registrado:

git update-index --assume-unchanged file

Revertir

git update-index --no-assume-unchanged file

Revertir todo

git update-index --really-refresh 
shiva kumar
fuente
Servicial. Sin embargo, revertir un archivo funcionó pero revertir todos no.
Adem Tepe
4

Si el archivo ya está en el repositorio y, por lo tanto, en el área Index / Staging, entonces una actualización a .gitignore no cambiará esa situación: se seguiría comprometiendo.

Para eliminar el archivo del área de índice / preparación, utilice git rm <file>.

Philip Oakley
fuente
¿Qué pasa si el archivo está en el repositorio pero aún no está preparado? Estoy tratando de ignorar los archivos * .log, pero todavía los veo en "Cambios". Quiero ignorar todo, ¿qué hacer?
Sandra K
@SandraK si ya hay una versión anterior de ese archivo (ruta de archivo / nombre) en el repositorio en la última confirmación, entonces se considera rastreado: el 'índice' tendrá ese archivo en sus registros y, por statuslo tanto , continuará informándole sobre esos cambios. Si desea ignorar los archivos * .log, tanto para los archivos previamente agregados como para los actualmente sin seguimiento, entonces necesita ambos git rm *.logy actualizar su archivo .gitignore. Primero verifique si algunos archivos de registro son realmente importantes ... Es fácil olvidar ese especial ;-)
Philip Oakley
-3

Una vez que un archivo aparece en el .gitignore, no puede cambiarlo.

Por lo tanto, podría eliminar el archivo de la lista en una confirmación, confirmar los cambios en la siguiente y luego volver a agregar el archivo a la lista de ignorados en una tercera confirmación.

Lo que suelo hacer es dividir el archivo en dos, uno que está permitido y puedo cambiar, que incluye el segundo archivo si existe, entonces los desarrolladores pueden hacer cambios de configuración en el archivo ignorado opcionalmente.

erikvold
fuente
1
" Una vez que un archivo está listado en el .gitignore, no puede cambiarlo " - ¿Puede aclarar qué quiere decir? ¡Tengo muchos archivos en muchos de mis archivos.gitignore y los cambio constantemente! Esta es la primera vez, escucho a alguien decir, que una vez que agrego el archivo .gitignore, no puedo cambiarlo.
trejder
1
En realidad está equivocado. Puedes cambiarlos. Git simplemente no los carga, ni siquiera le da la opción de cargarlos.
David