tag - git, filter-branch en todas las ramas
qué tipos de etiquetas existen en git (3)
Como explica la respuesta de @ ben-lee, todos son necesarios para reescribir todas las ramas. Si tiene etiquetas en su repositorio, querrá limpiar todas esas , así como las ramas, para obtener los beneficios de la reducción de tamaño, y eso requerirá un conjuro de --tag-name-filter cat
adicional.
Aunque la pregunta especifica el uso de git filter-branch
, el interlocutor quiere '' borrar algunos archivos y directorios grandes de mi repositorio '', por lo que vale la pena mencionar que la mejor herramienta para hacerlo es The BFG Repo Cleaner , una alternativa más simple y más rápida a git filter-branch
. Por ejemplo:
$ bfg --strip-blobs-bigger-than 10M
... elimina todos los blobs de más de 10MB (que no están en tu última confirmación) y funciona en todas las ramas y etiquetas de tu repositorio.
Descripción completa: soy el autor de BFG Repo-Cleaner.
Estoy usando las siguientes fuentes para borrar algunos archivos y directorios grandes de mi repositorio:
http://dound.com/2009/04/git-forever-remove-files-or-folders-from-history/
¿Por qué mi repositorio git es tan grande?
git filter-branch
solo parece funcionar en la rama actual, ¿hay alguna forma de aplicarlo a todas las ramas a la vez?
La solución es simple:
git filter-branch [options] -- --all
Tenga en cuenta los cuatro guiones (dos conjuntos de guiones dobles con un espacio intermedio) en -- --all
.
Si miras los documentos para git-filter-branch
, dice esto:
git filter-branch [--env-filter <command>] [--tree-filter <command>]
[--index-filter <command>] [--parent-filter <command>]
[--msg-filter <command>] [--commit-filter <command>]
[--tag-name-filter <command>] [--subdirectory-filter <directory>]
[--prune-empty]
[--original <namespace>] [-d <directory>] [-f | --force]
[--] [<rev-list options>…]
Continuando con la lectura, el comienzo de los documentos dice: "Le permite reescribir el historial de revisiones de git reescribiendo las ramas mencionadas en las <opciones de rev-list>, aplicando filtros personalizados en cada revisión".
Así que consultar los documentos para rev-list
de rev-list
da:
<opciones de rev-list> ... Argumentos para git rev-list. Todos los refs positivos incluidos por estas opciones son reescritos. También puede especificar opciones tales como --all, pero debe usar - para separarlas de las opciones de git filter-branch.
Y los documentos para git-rev-list
dicen:
--all
Pretend as if all the refs in refs/ are listed on the command line as <commit>.
Seguí todas las instrucciones para hacer esto en mi cuadro de Windows, pero seguí recibiendo un error, hasta que dejé de usar comillas simples y usé comillas dobles en su lugar.
Mi motivación fue que revisé accidentalmente mi entorno de vagrant
. Aquí está el comando para eliminar la carpeta vagrant
de todas las ramas:
git filter-branch --tree-filter "rm -rf vagrant" -f HEAD --all
Simplemente reemplace vagrant
con su nombre de directorio, y eliminará este directorio de todas las ramas.