tutorial stackoverflow remove origin from git size history rebase

stackoverflow - Elimina completamente(antiguo) los git de la historia.



git rebase tutorial (1)

Estoy empezando un proyecto con git, donde estaré enviando archivos muy grandes, pero solo unas pocas veces a la semana. He intentado usar git como está y parece que almacena el archivo completo en cada confirmación donde se modifica. Esto no funcionará para este proyecto, el repositorio crecería fuera de control. Por lo tanto, quiero reducir el tamaño del repositorio.

Mi primer pensamiento fue "simplemente" eliminar todas las confirmaciones anteriores a las dos semanas, o solo mantener, por ejemplo, cinco confirmaciones en la historia (esto probablemente sea mejor :)) He buscado en Google y leí mucho del Libro de la Comunidad de Git y supongo Voy a necesitar trabajar con git-rebase o git-filter-branch . La cosa es que parece que no puedo hacerlo funcionar.

Sólo para ilustrar; Tengo una historia H con una sola rama (la rama maestra)

A -> B -> C -> D -> E

Quiero eliminar algunas confirmaciones anteriores para que mi historial se vea como

C -> D -> E

Los compromisos A y B deben ser completamente purgados. He intentado git-rebase pero parece que git-rebase combinaciones en lugar de eliminar las antiguas, tal vez no entiendo completamente cómo funciona la rebase. Otro pensamiento que tuve fue eliminar todo de .git / objects y luego construir una nuevo commit usando git-hash-object -w , git-mktree y git-commit-tree , aún no he logrado enviar este árbol "artificial" al servidor.

No voy a trabajar con ninguna sucursal, por lo que no es necesario tener esto en cuenta.

Lo que me pregunto es si alguien me puede dar usos concretos de git-rebase si eso es lo que se supone que debo usar. O algunos otros consejos, ejemplos de lo que puedo hacer.

¡Aclamaciones!


Editar:

Los archivos grandes no serán los mismos archivos grandes todo el tiempo, y algunos archivos serán reemplazados por archivos nuevos. Quiero que estos archivos reemplazados se eliminen completamente de la historia.


Esto debería ser un simple git rebase -i donde tengas

p A s B s C p D p E

y luego edite el mensaje de confirmación para que AC sea solo el mensaje de confirmación de C.

git-rebase "aplastará" todas las confirmaciones en una sola confirmación, cuyos objetos son los mismos que los de C.

Nota: puede ser posible usar git filter-branch para cambiar los archivos grandes en los compromisos anteriores para que coincidan con los nuevos, si prefieres hacerlo. Pero es una operación peligrosa y no quiero darle un mal comando en caso de accidente.