Git: borrar files del repository de confirmaciones anteriores

Estoy en Github. Configuré un file .gitignore en el que especifico que los files no se agregarán a futuros commits ya que estoy tratando de aligerar la clonación. Ahora necesito eliminar todos esos files .class, por ejemplo, de todas las confirmaciones anteriores para compartir solo las fonts necesarias; de lo contrario, sin importar mis esfuerzos, siempre pesarán 50 MB más o less. Eché un vistazo a http://cheat.errtheblog.com/s/git . Creo que podría necesitar una composition de esos commands, pero realmente no quiero arruinar mi trabajo. Gracias

Hay un ejemplo en los documentos de git-filter-branch que coincide con su caso de uso.

git clone project project.tmp cd project.tmp git filter-branch --prune-empty --index-filter 'git rm --cached --ignore-unmatch *.class' HEAD cd .. git clone project.tmp project.clean rm -rf project.tmp cd project.clean 

project.clean debería estar listo para ser empujado aguas arriba.

PD. Si está nervioso acerca de cómo funcionará esta operación, nunca está de más experimentar en una twig de testing clon y github.

Antes de intentar esto, es una buena idea cambiar a una twig de testing:

testing de twig git; testing de pago de git

Lo que hice fue simplemente encontrar todos los files de class en el tree de files comprometidos y luego eliminarlos de git:

  1. git ls-files | grep * .class
  2. para el file en git ls-files |grep *.class ; hacer eco $ file; hecho; Esto solo está comprobando si my for loop tendrá todos los files que quiero antes de rm
  3. para el file en git ls-files |grep *.class ; do git rm –cached $ file; hecho;

Luego compromete esto con su repository de git y ponga esto en su .gitignore:

 syntax: regexp *.class 

Una vez que haya terminado con esto, puede optar por fusionar esto en su twig principal y pulsar o simplemente repetir lo mismo en la twig principal.