.gitignore después de confirmar


210

Tengo un repositorio git alojado en Github. Después de cometer muchos archivos, me estoy dando cuenta de que necesito para crear .gitignorey excluir .exe, .objarchivos.

Sin embargo, ¿eliminará automáticamente estos archivos comprometidos del repositorio? ¿Hay alguna forma de forzar eso?


66
Los futuros googlers pueden encontrar esto extremadamente útil. Breve y al grano: git-tower.com/learn/git/faq/ignore-tracked-files-in-git
Austin Dean

Respuestas:


331

No, no puede forzar la eliminación de un archivo que ya está confirmado en el repositorio solo porque se agregó al .gitignore

Debe git rm --cachedeliminar los archivos que no desea en el repositorio. (- en caché ya que probablemente desee conservar la copia local pero eliminarla del repositorio). Entonces, si desea eliminar todos los exe de su repositorio, haga

git rm --cached /\*.exe

(Tenga en cuenta que el asterisco * se cita desde el shell; esto permite que git, y no el shell, expanda los nombres de ruta de los archivos y subdirectorios)


66
@Madhur Ahuja En realidad, si lo hace git rm /\*.exe, eliminará todos los exe en su repositorio
manojlds

44
¿Para qué son los / \ 's?
Costa

55
@Costa están allí para escapar del asterisco, para evitar que el intérprete lo interprete, como está destinado git.
Lambart

2
Advertencia: los archivos se mantienen en local, es cierto ... Pero otros usuarios que ejecuten a git pullverán sus archivos eliminados.
ByScripts

42

Sin embargo, ¿eliminará automáticamente estos archivos comprometidos del repositorio?

No. Incluso con un .gitignorearchivo existente , puede organizar los archivos "ignorados" con el -findicador (forzar). Si los archivos ya están confirmados, no se eliminan automáticamente.

git rm --cached path/to/ignored.exe

¿Eso significa que he eliminado individualmente cada .exe?
Madhur Ahuja

Probablemente pueda agrupar esto, pero no sé cómo funciona esto bajo Windows
KingCrunch

30

Si aún no ha presionado los cambios:

git rm -r --cached .
git add .
git commit -m 'clear git cache'
git push

15

Tuve que eliminar .idea y las carpetas de destino y después de leer todos los comentarios, esto funcionó para mí:

git rm -r .idea
git rm -r target
git commit -m 'removed .idea folder'

y luego empujar para dominar


.ideafue mi problema, supongo que también fue tuyo:)
Olivier Pons

5

Sin embargo, ¿eliminará automáticamente estos archivos comprometidos del repositorio?

No.

La 'mejor' receta para hacer esto es usar git filter-branchcomo está escrito aquí:

La página de manual de git-filter-branch contiene ejemplos completos.

Nota Estarás reescribiendo el historial. Si ha publicado alguna revisión que contenga los archivos agregados accidentalmente, esto podría crear problemas para los usuarios de esas ramas públicas. Infórmeles, o tal vez piense qué tanto necesita eliminar los archivos.

Nota En presencia de etiquetas, use siempre la --tag-name-filter catopción para git filter-branch. Nunca está de más y te ahorrará el dolor de cabeza cuando te des cuenta de que lo necesitas


Ejecuté este comando que mostró Rewrite 57c1f1f04a3ed01f50c3260714cfc82c973ac816 (3/3) ADVERTENCIA: Ref 'refs / heads / master' no ha cambiado y no pasó nada
Madhur Ahuja

Es una advertencia, y muy probablemente significa que la rama maestra no contenía (todavía) ninguna revisión con los archivos que se eliminarán. Puedes verificar eso fácilmente. Si hay un problema, actualice la pregunta. PD: use - --allpara reescribir todas las ramas (locales) a la vez
sehe

1

Incluso después de eliminar los archivos y luego confirmarlos, todavía tendrá esos archivos en el historial. Para eliminarlos, considere usar BFG Repo-Cleaner . Es una alternativa a git-filter-branch.

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.