tag - qué tipos de etiquetas existen en git
Cómo eliminar versiones antiguas de archivos multimedia de un repositorio git (5)
Como ya se mencionó, aquí git rebase
escribir la historia, por lo que tendrás que conseguir colaboradores (si los hay) para hacer git rebase
.
En cuanto a eliminar un archivo particular de la historia, Github tiene un buen tutorial .
Para una solución en el futuro, debería considerar colocar los archivos binarios en un submódulo.
El soporte de submódulos de Git permite que un repositorio contenga, como un subdirectorio, un checkout de un proyecto externo. Los submódulos mantienen su propia identidad; el soporte de submódulos simplemente almacena la ubicación del repositorio de submódulos y la ID de confirmación, por lo que otros desarrolladores que clonan el proyecto que lo contiene ("superproyecto") pueden clonar fácilmente todos los submódulos en la misma revisión. Las verificaciones parciales del superproyecto son posibles: puede decirle a Git que no clone ninguno, algunos o todos los submódulos.
Tengo un repositorio Git con varios archivos multimedia grandes (imágenes y archivos de audio). Varias versiones de estos archivos multimedia se han comprometido sucesivamente con el repositorio. Los archivos son versiones sucesivamente refinadas de los mismos activos y tienen el mismo nombre.
Quiero mantener solo la última versión en el repositorio de Git, porque se está volviendo demasiado grande.
¿Cuál es la forma más sencilla de hacer esto?
¿Cómo puedo propagar estos cambios correctamente al repositorio ascendente?
Consulte la sección sobre ''Eliminación de objetos'' en el capítulo Mantenimiento y recuperación de datos en el libro de ProGit. Proporciona pasos sobre cómo eliminar objetos del repositorio de git. Pero ten en cuenta que es destructivo.
Por lo que sé, esto no se puede hacer, porque en git, cada compromiso depende de los contenidos de todo el historial hasta ese momento. Entonces, la única forma de deshacerse de los archivos grandes y antiguos sería "reproducir" todo el historial de confirmación (preferiblemente con las mismas marcas de tiempo de confirmación y autores), omitiendo los archivos grandes. Tenga en cuenta que esto producirá un historial de compromiso completamente separado.
Obviamente, este no es un enfoque muy viable, por lo que la lección probablemente sea "no use git para versionar archivos binarios enormes". En su lugar, tal vez podría tener una carpeta separada (ignorada) para los archivos y usar un sistema separado para controlar su versión.
Tengo una secuencia de comandos ( github gist here ) para eliminar una selección de carpetas no deseadas de todo el historial de un repositorio git, o eliminar todas las versiones, excepto la última, de una carpeta.
Es difícil suponer que todos los repositorios de git están en ~/repos
, pero eso es fácil de cambiar. También debería ser fácil de adaptar para trabajar con archivos individuales.
Hilo viejo pero en caso de que alguien más tropiece aquí ...
GitHub y Bitbucket recomiendan usar BFG Repo-Cleaner .
Ver:
GitHub: Eliminar datos sensibles
Bitbucket: reducir el tamaño del repositorio y Bitbucket: mantener un repositorio Git
Ejemplo para eliminar archivos de más de 1 megabyte, así como jpgs, pngs y mp3 que no están en HEAD:
# First get the latest bfg.jar, then:
$ git clone --mirror git://example.com/some-big-repo.git
$ java -jar bfg.jar --strip-blobs-bigger-than 1M --delete-files ''*.{jpg,png,mp3}'' some-big-repo.git
$ cd some-big-repo.git
$ git reflog expire --expire=now --all && git gc --prune=now --aggressive
$ git push
Nota: ahora que has introducido las revoluciones actualizadas, el repositorio remoto también debería ejecutar git gc
... de lo contrario, no verás la reducción de tamaño. (ver, por ejemplo, https://.com/a/28782154/3419541 )
Finalmente, vuelva a clonar el repositorio para asegurarse de que no vuelva a confirmar los blobs de archivos de medios antiguos.