2011-06-30 11 views
141

Tengo un repositorio git alojado en Github. Después de confirmar muchos archivos, me doy cuenta de que necesito crear .gitignore y excluir los archivos .exe, .obj.gitignore después del commit

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

+0

Googlers futuros pueden encontrar este extremadamente útil. Breve y al grano: https://www.git-tower.com/learn/git/faq/ignore-tracked-files-in-git –

Respuesta

235

No, no se puede obligar a un archivo que ya está comprometido en el repositorio a ser eliminado sólo porque se añade a la .gitignore

Tienes que git rm --cached para eliminar los archivos que no desee en el repositorio. (--cached ya que es probable que desee mantener la copia local, sino eliminar de la cesión temporal.) Así que si desea eliminar todos los exe de tu repositorio hacer

git rm --cached /\*.exe 

(Tenga en cuenta que el asterisco * se citó del shell: esto permite a git, y no al shell, expandir las rutas de archivos y subdirectorios)

+0

¿Eso significa que tengo eliminar individualmente cada .exe –

+5

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

+3

¿Para qué sirven los /? – Costa

23

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

No. Incluso con un .gitignore existentes que son capaces de organizar los archivos "ignorados" con la bandera -f (fuerza). Si los archivos ya están comprometidos, no se eliminan automáticamente.

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

¿Eso significa que tengo eliminar individualmente cada .exe –

+0

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

5

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

El 'mejor' receta para hacer esto es utilizando como git filter-branch escrito sobre aquí:

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

Nota Volverá a escribir el historial. Si ha publicado alguna revisión que contenga los archivos agregados accidentalmente, esto podría crear problemas para los usuarios de esas sucursales públicas. Infórmales, o quizás piense en cuánto necesita eliminar los archivos.

Nota En presencia de etiquetas, utilice siempre la opción --tag-name-filter cat en git filter-branch. Nunca está de más y le ahorrará el dolor de cabeza cuando se dan cuenta más tarde se convertía lo necesitas

+0

ejecuté este comando que mostró Rewrite 57c1f1f04a3ed01f50c3260714cfc82c973ac816 (3/3) ADVERTENCIA: Ref 'refs/heads/master' no se ha modificado y no pasó nada –

+0

Es una advertencia, y lo más probable es que la rama principal no (todavía) contiene cualquier revisión con los archivos que se eliminarán. Usted puede verificar eso fácilmente. Si hay un problema, actualice la pregunta. ** PD: ** use - '--all' para reescribir todas las ramas (locales) a la vez – sehe

+0

El enlace ya no parece estar activo ... – Noctis

1

Incluso después de eliminar el archivo (s) y luego de comprometerse, de todas maneras tendrá esos archivos en la historia. Para eliminarlos, considere usar BFG Repo-Cleaner. Es una alternativa a git-filter-branch.

5

Tuve que eliminar.idea y objetivo carpetas 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 a dominar

1

Si no ha empujado a los cambios ya:

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