Mantenga los archivos ignorados fuera del estado de git


133

Me gustaría evitar que Git muestre archivos ignorados git status, porque tener toneladas de documentación y archivos de configuración en la lista de archivos modificados pero no actualizados hace que la lista sea inútil.

¿Es normal que Git muestre estos archivos?

Puse la información de ignorar en un .gitignorearchivo en el directorio raíz del repositorio de Git y no se agregan cuando se usa, git add .pero parece que tampoco se ignoran por completo, ya que aparecen en la lista mencionada anteriormente y no aparecen en la lista impreso por git ls-files --others -i --exclude-standard. Solo los archivos que coinciden con los patrones en ~/.gitignoreaparecer allí.

¿Podría ser porque en una etapa anterior no los ignoré y por lo tanto se cometieron al menos una vez?

Respuestas:


231

Como encontré en esta publicación , .gitignoresolo funciona para archivos sin seguimiento. Si agregó archivos al repositorio, puede:

git update-index --assume-unchanged <file>

o eliminarlos del repositorio por

git rm --cached <file>

Editar

Este artículo explica eso también


44
El índice de actualización funcionó para mí. Problema similar donde el estado de git muestra archivos ignorados ... muy molesto. +1
Abe Petrillo

3
Todavía tengo este problema. Ninguno de los comandos anteriores funcionó para mí. En ambos casos, git dice que no tiene conocimiento de los archivos en cuestión, pero aún se muestran en estado git :(
Cfreak

55
@Cfreak ¿ git status -- <file>Muestra "Cambios no organizados para confirmación" o "Archivos sin seguimiento" para su archivo? La primera es si ya tiene un archivo en el índice y necesitaría más información para resolver su problema (mejor cree una pregunta separada con los mensajes git que se muestran y simplemente publique el enlace en el comentario). El último es para archivos que git no sigue (todavía), pero que no están en el .gitignorearchivo y se pueden agregar libremente al índice.
MBO

1
@MBO: sí, lo hace. ¡Gracias! Su comentario me ayudó a encontrar esta respuesta: stackoverflow.com/questions/594757/… que funcionó para mí.
Cfreak

1
La primera opción funciona como un encanto. Ya probé el segundo, y causó que los archivos se escenificaran como "eliminados" y definitivamente no quería eso.
Carrm

16

También he tenido este problema, probablemente sea porque agregaste tu directorio / archivos ignorados a .gitignore después de que GIT los marcó como "para ser rastreados" en un flujo de confirmación inicial.

Por lo tanto, debe borrar el caché de seguimiento de git de esta manera:

git rm --cached -r [folder/file name]

Una explicación más detallada se puede leer aquí: http://www.frontendjunkie.com/2014/12/stop-git-from-tracking-changes-to.html

El comando anterior también eliminó los restos de la carpeta / archivos de su origen GIT remoto. Entonces tus repositorios GIT se vuelven limpios.


11

El problema puede ser que este archivo todavía está en la caché de git. Para resolver este problema necesita reiniciar git cache.

Restablecer caché de git. Esto elimina todo del índice.

git rm -r --cached . 

Agregue todos los archivos nuevamente:

git add . 

Cometer:

git commit -m ".gitignore was fixed." 

2

Esto seguramente funciona,

git rm --cached -r [folder/file name]


1

Supongo que no desea agregar el directorio tmp (plataforma de Visual Studio)

1- agrega líneas a continuación a tu archivo local .gitignore

## ignore tmp
/tmp/
./tmp/

3- copia de seguridad y eliminar la carpeta tmp localmente. (Copia de seguridad en otro lugar. ¿Escritorio?)

4- Confirmar cambios a Local que Sincronizar a Remoto (por ejemplo, github).

Después de estos pasos, su directorio tmp no se volverá a cargar.


0

De man git-lsfiles :

-i, --ignored
Show ignored files in the output. Note that this also reverses any exclude list present.

Personalmente, tiendo a mantener archivos doxygen en mi árbol fuente, así que simplemente agregué esto a mi .gitignore (que se encuentra en el directorio superior de mi árbol fuente):

docs/*

Espero que ayude.


0

Los siguientes pasos funcionan solo para archivos sin seguimiento . Esta información es aplicable para la siguiente configuración:

Platform: linux

Git version: git version 1.8.3.1

Ponga la lista de archivos a ignorar en el archivo "excluir" presente en la siguiente ubicación.

<path till .git directory>/.git/info/exclude

Contenido inicial del archivo "excluir"

# git ls-files --others --exclude-from=.git/info/exclude
# Lines that start with '#' are comments.
# For a project mostly in C, the following would be a good set of
# exclude patterns (uncomment them if you want to use them):
# *.[oa]
# *~

Contenido final del archivo "excluir"

# git ls-files --others --exclude-from=.git/info/exclude
# Lines that start with '#' are comments.
# For a project mostly in C, the following would be a good set of
# exclude patterns (uncomment them if you want to use them):
# *.[oa]
# *~


*.tar
*.gch

0

Según la respuesta aceptada, puede asumir que el archivo no ha cambiado , de modo que lo que haga en su máquina local no se comprometa a su rama remota.

Algo así como git update-index --assume-unchanged src/main/resources/config.properties donde src / main.resources / config.properties es una muestra de la ruta para encontrar ese archivo dentro de su proyecto.

Ahora, si desea eliminar el archivo por completo de su repositorio, puede usarlo en remove cachedlugar de `git rm --cached

Este escenario podría ser aplicable en la siguiente situación:

Supongamos que tengo un archivo donde almaceno las contraseñas. Inicialmente comprometí ese archivo con detalles incorrectos, solo para que mis colegas tengan ese mismo archivo en sus máquinas. Sin embargo, ahora he agregado mis detalles correctos en mi máquina local. ¿Cómo evito que ese archivo se vuelva a confirmar accidentalmente con los detalles de contraseña ahora correctos?


-1

Me gusta esto

git --ignored myfolder

Y mostrará el estado solo para myfolder

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.