74 votos

Quitar la carpeta y su contenido de git/github historia

Yo estaba trabajando en un repositorio en mi cuenta de github y este es un problema con el que me tropecé.

  • Nodejs proyecto con una carpeta con un par de mecanismo nacional de prevención paquetes instalados
  • Los paquetes estaban en node_modules carpeta
  • Añadió que la carpeta de repositorio de git y empujó el código a github (estaba pensando en el mecanismo nacional de prevención de la parte en ese momento)
  • Se dio cuenta de que en realidad no necesitan esa carpeta a ser una parte del código
  • Elimina esa carpeta, lo empujaron

En esa instancia, el tamaño total del repositorio git fue de alrededor de 6 mb de donde el código real (todos excpt esa carpeta) fue sólo de alrededor de 300 KB.

Ahora lo que estoy buscando en la final es una forma de deshacerse de los detalles de la carpeta del paquete de git de la historia, así que si alguien los clones, que no tiene que descargar 6mb de la pena de la historia donde el único de los archivos que va a obtener a partir de la última cometer tendría un valor de 300 KB.

Miré las posibles soluciones para esto y probado estos 2 métodos

La Esencia parecía que trabajó en donde después de ejecutar la secuencia de comandos, se demostró que se deshizo de esa carpeta y después de que se demostró que el 50 diferentes comete fueron modificados. Pero no deje que me empuje a ese código. Cuando traté de empujarlo, se dijo Branch up to date , pero mostró 50 comete fueron modificados en un git status. Los otros 2 métodos no ayuda tampoco.

Ahora a pesar de que se demostró que se deshizo de esa carpeta de la historia, cuando he comprobado que el tamaño de la repo en mi localhost, todavía era de alrededor de 6 MB. (También he eliminado el refs/originalcarpeta, pero no ver el cambio en el tamaño de la repo).

Lo que estoy buscando para aclarar es que, si hay una manera de deshacerse de, no sólo la confirmación de la historia (que es la única cosa que creo que pasó), pero también los archivos de git es mantener suponiendo que se quiere deshacer.

Digamos que una solución se presenta para el este y se aplica en mi localhost pero no puede ser reproducido para que repo de github, es posible clonar que repo, la reversión a la primera cometer realizar el truco y empuje (o eso no significa que git todavía tiene un historial de todos los comete? - aka. 6MB).

Mi objetivo es, básicamente, encontrar la mejor manera de deshacerse de el contenido de la carpeta de git para que un usuario no tiene que descargar 6MB de cosas y posiblemente aún tiene la otra se compromete a que no se toca en la carpeta de módulos (eso es casi todo de ellos) en git de la historia.

Gracias

142voto

Mohsen Puntos 16856

Si usted está aquí para copiar-pegar el código:

Este es un ejemplo que retire node_modules de la historia

git filter-branch --tree-filter 'rm -rf node_modules' HEAD
echo node_modules/ >> .gitignore
git add .gitignore
git commit -m 'Removing node_modules from git history'

21voto

Joseph DeCarlo Puntos 2093

Este artículo lo explica muy bien: http://git-scm.com/book/en/Git-Internals-Maintenance-and-Data-Recovery

Tenga en cuenta que cuando haces algo como esto, vuelve a escribir toda la historia.

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X