Gitignore no funciona

276

Mi .gitignorearchivo no funciona por alguna razón, y ninguna cantidad de Google ha podido solucionarlo. Esto es lo que tengo:

*.apk
*.ap_
*.dex
*.class
**/bin/
**/gen/
.gradle/
build/
local.properties
**/proguard/
*.log

Está en el directorio master, que es mi repositorio de git. Estoy ejecutando Git 1.8.4.2 porque estoy en una MacBook con OSX 10.8.6.

usuario3280133
fuente
44
1. ¿Qué archivos están indexados aunque no deberían? 2. ¿Agregó el .gitignore después de agregar estos archivos al repositorio?
Ahmad
2
@ Ahmad En varios proyectos, la /bin/carpeta todavía se muestra cuando hago un git status. No he cambiado esos archivos desde que agregué el.gitignore
user3280133
1
"desde que agregué el .gitignore", ¿entonces agregaste el .gitignore después de agregar los archivos?
Ahmad
3
posible duplicado de .gitignore no funciona
Liam

Respuestas:

688

Los archivos / carpetas en su control de versiones no sólo va a eliminar a sí mismos sólo porque se les agregó al .gitignore. Ya están en el repositorio y debe eliminarlos. Puedes hacer eso con esto:

( Recuerde confirmar todo lo que ha cambiado antes de hacer esto ) .

git rm -rf --cached .
git add .

Esto elimina todos los archivos del repositorio y los agrega de nuevo (esta vez respetando las reglas en su .gitignore).

Ahmad
fuente
2
o puede intentar recuperar los archivos / carpetas que agregó a .gitignore usando git checkout folder_to_ignore / *
Zahra
1
@Greenish, pero eso no funcionaría si ya se han comprometido, solo funcionaría si se han organizado, lo que en caso de que la carpeta ya esté en .gitignore no debería suceder (a menos que fuerces agregar) :)
Ahmad
1
no funciona para mí cuando empujo los cambios a github. ¡Dice que todo está actualizado!
Dr. Younes Henni el
1
Lo siento, Ahmed, arreglé mi problema eliminando el archivo gitignore y tirando y empujando nuevamente al repositorio remoto. Ya no recuerdo lo que decía cuando escribía git status. Mi problema está solucionado Muchas gracias.
Dr. Younes Henni el
3
Creo que es mejor git agregue un comando 'git ignore' para simplificar esto. Por lo tanto, podríamos usar git ignore path/fileen cualquier momento.
Tiw
123

Para eliminar un solo archivo que ya se ha agregado / inicializado a su repositorio, es decir, deje de rastrear el archivo pero no lo elimine del uso de su sistema: git rm --cached filename

Para destrabar cada archivo que ahora está en su .gitignore:

Primero confirme los cambios de código pendientes y luego ejecute este comando:

git rm -r --cached .

Esto elimina los archivos modificados del índice (área de preparación), luego simplemente ejecuta:

git add .

Compromételo:

git commit -m ".gitignore is now working"
Nicolas
fuente
1
Asegúrese de fusionar sus ramas de nuevo a master o mover su puntero porque cuando intenté esto, perdí mis dos ramas de características. Afortunadamente no perdí ningún trabajo, todas mis actualizaciones más recientes de la rama de trabajo se restablecieron a la rama maestra, pero dependiendo de su configuración, este comportamiento puede ser indeseable.
Sledge
¿Cómo usarías este comando para eliminar una carpeta del caché en lugar de un archivo?
RealMJDev
15

Después de ir por un agujero de conejo tratando de seguir las respuestas a esta pregunta (tal vez porque tuve que hacer esto en un proyecto de estudio visual), encontré que el camino más fácil era

  1. Cortar y pegar los archivos que ya no quiero rastrear en una ubicación temporal

  2. Cometer la "eliminación" de esos archivos

  3. Cometer una modificación del .gitignorepara excluir los archivos que había movido temporalmente

  4. Mueva los archivos nuevamente a la carpeta.

Encontré que esta es la forma más directa de hacerlo (al menos en un estudio visual, o asumiría otro entorno basado en IDE como Android Studio), sin dispararme accidentalmente en el pie con un efecto bastante generalizado git rm -rf --cached ., después de lo cual el proyecto de estudio visual en el que estaba trabajando no se cargó.

Garrett Simpson
fuente
2
Me gusta bastante este enfoque, parece menos destructivo, incluso si no se considera "adecuado".
theyetiman
6

En mi caso, era un espacio en blanco al comienzo del archivo que se mostró claramente cuando abrí el archivo en el Bloc de notas, no era obvio en Visual Studio Code.

S Saad
fuente
4

Usé algo para generar algo común .gitignorepara mí y me encontré con esto. Después de leer la respuesta de @Ozesh, abrí en VS Code porque tiene un buen indicador en la parte inferior derecha que muestra el tipo de terminaciones de línea. Era LF, así que lo convertí a CRLF como se sugirió, pero sin dados.

Luego miré al lado de las terminaciones de línea y noté que estaba guardado usando UTF16. Así que volví a guardar usando UTF8 codificando un voila, funcionó. No pensé que el CRLF importara, así que lo cambié a LF para estar seguro y todavía funcionaba.

Por supuesto, este no era un problema de OP, ya que ya había confirmado los archivos, por lo que ya estaban indexados, pero pensó que compartiría en caso de que alguien más se topara con esto.

TLDR ; Si aún no ha confirmado los archivos y .gitignore todavía no se respeta, verifique la codificación del archivo y asegúrese de que sea UTF8 y si eso no funciona, entonces intente jugar con los finales de línea.

DeezCashews
fuente
1
UTF16 fue el culpable para mí. Código VS abierto> .gitignore abierto> abrió el símbolo del sistema> "Cambiar codificación de archivo"> ​​"UTF-8"> Guardar archivo
Michael
3

En mi caso, los espacios en blanco al final de las líneas de .gitignore fueron la causa. ¡Así que ten cuidado con los espacios en blanco en el .gitignore!

026
fuente
2

Resolví mi problema haciendo lo siguiente:

En primer lugar, soy un usuario de Windows, pero me he enfrentado a un problema similar. Entonces, estoy publicando mi solución aquí.

Hay una razón simple por la que a veces .gitignore no funciona como se supone que debe hacerlo. Se debe al comportamiento de conversión EOL.

Aquí hay una solución rápida para eso

Edición> Conversión EOL> Formato de Windows> Guardar

Puede culpar a su configuración de editor de texto por eso.

Por ejemplo:

Como soy desarrollador de Windows, normalmente uso Notepad ++ para editar mi texto a diferencia de los usuarios de Vim.

Entonces, lo que sucede es que cuando abro mi archivo .gitignore usando Notepad ++, se ve así:

## Ignore Visual Studio temporary files, build results, and
## files generated by popular Visual Studio add-ons.
##
## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore


# See https://help.github.com/ignore-files/ for more about ignoring files.

# User-specific files
*.suo
*.user
*.userosscache
*.sln.docstates
*.dll
*.force
# User-specific files (MonoDevelop/Xamarin Studio)
*.userprefs

Si abro el mismo archivo con el Bloc de notas predeterminado, esto es lo que obtengo

## Ignore Visual Studio temporary files, build results, and ## files generated by popular Visual Studio add-ons. ## ## Get latest from  https://github.com/github/gitignore/blob/master/VisualStudio.gitignore # See https://help.github.com/ignore-files/ for more about ignoring files. # User-specific files *.suo *.user *.userosscache 

Entonces, es posible que ya lo haya adivinado al mirar la salida. Todo en el .gitignore se ha convertido en un trazador de líneas, y dado que hay un ## al principio, actúa como si todo estuviera comentado.

La forma de solucionar esto es simple: simplemente abra su archivo .gitignore con Notepad ++, luego haga lo siguiente

Edición> Conversión EOL> Formato de Windows> Guardar

La próxima vez que abra el mismo archivo con el bloc de notas predeterminado de Windows, todo debería estar formateado correctamente. Pruébelo y vea si esto funciona para usted.

Ozesh
fuente
1

Además, los comentarios tienen que estar en su propia línea. No se pueden poner después de una entrada. Entonces esto no funcionará:

/node_modules  # DON'T COMMENT HERE (since nullifies entire line)

Pero esto funcionará:

# fine to comment here
/node_modules
Ben Pritchard
fuente
0

¿ git reset --hardFunciona para alguien? No estoy diciendo que esta sea una buena solución, simplemente pareció funcionar la primera vez que lo intenté.

usuario1889992
fuente
Por favor ignora mi comentario anterior. Alguien en el trabajo hizo algo tan malo en Git que causó carpetas duplicadas y no lo supe durante bastante tiempo. Gracias.
user1889992
0

Cometí el gran error de editar mi dockerignore, funcionó muy bien después de encontrar el archivo de ignorar correcto: p


fuente
0

Agregar mi parte ya que esta es una pregunta popular.

No pude colocar el directorio .history dentro de .gitignore porque no importaba qué combo intentara, simplemente no funcionaba. Windows sigue generando nuevos archivos en cada guardado y no quiero verlos en absoluto.

ingrese la descripción de la imagen aquí

Pero luego me di cuenta, este es solo mi entorno de desarrollo personal en mi máquina. Cosas como .history o .vscode son específicas para mí, por lo que sería extraño que todos incluyeran sus propias entradas .gitignore en función de qué IDE o sistema operativo estén utilizando.

Así que esto funcionó para mí, solo agregue ".history" a .git / info / exclude

echo ".history" >> .git/info/exclude
Daniel Katz
fuente