Bitbucket: eliminar carpeta del historial de Git

Hay un límite estricto de 2 GB cuando se aloja Git en Bitbucket ; si se supera, solo tendrá acceso de solo lectura al repositorio. Para evitar esto, por ejemplo, elimina retroactivamente carpetas o archivos grandes de sus confirmaciones. Pero también en otros casos (si los datos de acceso han ingresado al historial o los módulos_nodo se han deslizado nuevamente al maestro), debe manipular retrospectivamente el historial de Git en contra de su naturaleza.


Bitbucket ha escrito un artículo detallado sobre esto. Para revisar todo en un caso, primero creamos un nuevo repositorio:

historial de bitbucket limpio

Luego clonamos el repositorio en una carpeta vacía en la máquina local:

6ab7686fc508ce87c52b10bb5d01ee51

Ahora creamos dos subcarpetas con archivos de contenido aleatorio:

6ab7686fc508ce87c52b10bb5d01ee51

Ahora estamos presionando al maestro:

6ab7686fc508ce87c52b10bb5d01ee51

Ahora casi hemos alcanzado el límite máximo de 2 GB en Bitbucket:

historial de bitbucket limpio

También podemos verificar esto localmente (ver "size-pack"):

6ab7686fc508ce87c52b10bb5d01ee51

historial de bitbucket limpio

La tarea ahora es eliminar retroactivamente "foo" del repositorio para reducir a la mitad su tamaño. Para hacer esto, primero editamos el HEAD actual y escribimos la carpeta en el gitignore:

6ab7686fc508ce87c52b10bb5d01ee51

Finalmente, usamos el BFG Repo Cleaner para eliminar la carpeta (BFG requiere un JRE actual en el sistema como requisito del sistema):

6ab7686fc508ce87c52b10bb5d01ee51

Ahora vemos el resultado localmente:

6ab7686fc508ce87c52b10bb5d01ee51

historial de bitbucket limpio

Sin embargo, el tamaño del repositorio aún no ha cambiado en Bitbucket porque el recolector de basura aún no se ha ejecutado de forma remota y bitbucket no ejecuta un "git gc" con cada pulsación:

historial de bitbucket limpio

El soporte también confirma esto:

historial de bitbucket limpio

Por lo tanto, es mejor enviar una solicitud directamente a support@bitbucket.org para ejecutar manualmente "git gc" en el repositorio. Después de un corto tiempo, esto también fue hecho por el equipo de soporte:

historial de bitbucket limpio

Si ahora "recién" arrastra el repositorio a otra computadora, solo 0.9 GB terminarán en el disco. Si alguien todavía tiene la versión de 1.8 GB disponible localmente, un "git pull" seguido de "git gc" es suficiente.

Espalda