tag repositorio que log crear git git-filter-branch

repositorio - git push tag



Podar compromisos de fusión vacía de la historia en el repositorio de Git (5)

Encontré un pequeño script muy lindo envoltorio alrededor de la rama filtro aquí:

https://github.com/pflanze/chj-bin/blob/master/cj-git-filter-branch

Segundos y antecedentes aquí:

http://lists.q42.co.uk/pipermail/git-announce/2011-September/000486.html

He limpiado bastante nuestro repositorio Git, necesitamos eliminar partes grandes del historial. Lo hago usando:

git filter-branch --prune-empty --tree-filter ''rm -rf some_stuff''

El --prune-empty eliminará los commits que quedan vacíos después del proceso, excepto commits con múltiples padres (merge commits). Incluso si la rama que se fusiona no contiene absolutamente nada, y la fusión no agrega nada al árbol.

¿Cómo puedo también eliminar estas confusiones de fusión vacías de la historia?


Entonces mi solución está moviendo todo a subdirectorio (históricamente) y luego a --subdirectory-filter

Error de primer paso que combina repositorios git en subdirectorios

Modifiqué un poco el archivo sh:

#!/bin/bash git ls-files -s | sed "s-/t-&temp_dir/-" | GIT_INDEX_FILE="$GIT_INDEX_FILE.new" git update-index --index-info mv "$GIT_INDEX_FILE.new" "$GIT_INDEX_FILE" || true

correr

git filter-branch --index-filter ''~/doit.sh'' HEAD

segundo paso

git filter-branch --subdirectory-filter temp_dir --prune-empty

y empujarlo.


Esto es superior a la solución de rebase porque conserva la información del committer, las fechas del committer y las fusiones no vacías del historial original.

git filter-branch --prune-empty --parent-filter / ''sed "s/-p //g" | xargs -r git show-branch --independent | sed "s//</-p /g"''

Esto está inspirado en el mismo hilo en la lista de correo del kernel que la solución de Lucas. Sin embargo, no requiere Ruby y es de una sola línea. Sin embargo, requiere versiones de GNU de xargs y sed .


Necesitaba hacer esto después de ejecutar filter-branch en una copia de ssokolow/profile para separar ssokolow/lap .

Esto hizo un trabajo decente como un comando automático "colapsar todo lo que quedaba vestigial por" --prune-empty ":

git rebase --root HEAD

(Necesitaba la --root para que reemplazara la confirmación inicial ahora vacía con la más antigua que aún tenía contenido).