tipos tag remove qué existen etiquetas crear commits commands git git-filter-branch git-rewrite-history

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.