2010-11-08 21 views
122

Quiero que git deje de seguir mi registro de desarrollo local (log/development.log) en nuestros repositorios. ¿Es esto posible y cómo puedo hacerlo?Eliminar un archivo existente de un Git Repo

+0

posible duplicado de [Haciendo que "git" olvide "sobre un archivo que * fue * rastreado pero ahora es" .gitignored "] (http://stackoverflow.com/questions/1274057/making-git-forget-about-a -file-that-was-track-but-is-now-gitignored) – Cascabel

Respuesta

138

sólo para dar la respuesta completa a la vez:

  1. de Klemens: Es necesario agregar el archivo a su archivo .gitignore algún lugar por encima del archivo deseado en el repositorio. es decir,

    $ cd $ cat >> .gitignore development.log C-d

  2. desde m. Narębski: A continuación, deberá eliminar el archivo de la cesión temporal ejecutando "git rm --cached <file> y luego cometer esta eliminación"

Si también estaba esperando para hacer la mirada de recompra como si nunca había rastreado ese archivo, es decir mucho más complicado y altamente desaconsejado, ya que no solo crea compromisos nuevos para cada compromiso en su historial, destruyendo la interoperabilidad de una manera desagradable entre otras personas que han clonado su repositorio, sino que también deja a cada uno de esos compromisos sin probar (asumiendo prueba tus commits antes de hacerlos).

Con esta advertencia en mente, la herramienta que está buscando si ese es su objetivo es filter-branch. El primer ejemplo hace exactamente lo que estoy describiendo.

+3

utilizando git rm --cached parece haberlo eliminado no solo de la rama, sino que cuando lo conecto a otro sistema elimina los archivos físicamente en ese sistema. ¿Alguna idea de lo que está pasando allí? – biagidp

+2

En respuesta a lo anterior: creo que el problema estaba en que no tenía .gitignore en el sistema alternativo antes de tirar los cambios, por lo que la eliminación eliminó la copia local. Al menos esa es la teoría – biagidp

1

agregue el archivo gitignore.

ver http://git-scm.com/docs/gitignore

+13

Esto es solo la mitad de la respuesta. Las entradas '.gitignore' no se aplican a los archivos que ya están siendo rastreados. –

+10

La segunda parte es 'git rm --cached ' y luego se realiza esta eliminación. –

+1

¿Por qué no hay un comando simple para que git reevalúe todos los archivos actualmente rastreados de acuerdo con el archivo .gitignore actual? ... o es eso ejerciendo demasiado sentido común? : p – Alexander

51

Para detener el seguimiento del archivo, simplemente use git rm --cached <filename>.

Pero como se señala por los otros aquí, agregar el archivo a .gitignore puede evitar que vuelva a agregarlo accidentalmente más tarde.

Cuestiones relacionadas