git-rewrite-history

git rewrite history - ¿Deseas eliminar los nombres de archivo de una ruta específica?



git-rewrite-history (1)

Soy el desarrollador de The BFG , y me alegra que lo hayas encontrado útil y rápido. Parte de la salsa especial que hace que el BFG sea tan rápido es que es independiente de la ruta, por lo que no puede decir directamente algo como --delete /root/test/a.txt . Estoy pensando en agregar algo de soporte para la acción que depende de la ruta, pero no quiero que afecte negativamente el rendimiento.

La pregunta clave al limpiar su repositorio es: ¿Qué está tratando de lograr, de estas dos opciones:

  • Reducción en el tamaño del repositorio Git
  • Eliminación de datos privados

A partir de su pregunta, parece que su único objetivo es el primero, para reducir el tamaño del repositorio Git. Si /root/test/a.txt es bastante pequeño, es decir, de tamaño comparable al resto de los archivos legítimos en su repositorio, realmente no puede usar --strip-blobs-bigger-than X para deshacerse de él, ya que eliminaría demasiados de sus otros archivos regulares. Pero si ese es el caso, me relajaría y lo dejaría pasar, no le está costando mucho espacio de almacenamiento en comparación con la totalidad de su repo.

Si /root/test/a.txt es lo suficientemente grande como para molestarlo, probablemente pueda usar --strip-blobs-bigger-than X para deshacerse de él - recuerde que BFG protege todos los archivos en su confirmación actual (o incluso más ramas si usas --protect-blobs-from <refs> ) - por lo que los archivos grandes legítimos que estás usando actualmente no serán tocados.

Si realmente desea deshacerse de este archivo inocuo y pobre, pero no quiere filtrar por tamaño, hay dos opciones compatibles con BFG:

Utilice la --delete-folders test

... que eliminará toda la carpeta /root/test/ (y todas las demás carpetas llamadas ''test''), pero no /root/test2/ . No sirve de mucho si hay otras cosas en /root/test/ que quiere conservar.

Utilice --strip-blobs-with-ids <blob-ids-file>

... tienes que buscar todos los Git blob-ids que haya habido para /root/test/a.txt , lo que puedes hacer con algunos comandos de git como este:

git log --format=%H -- /root/test/a.txt | xargs -IcommitId git rev-parse commitId:/root/test/a.txt

He estado jugando con la herramienta BFG Repo-Cleaner para limpiar el historial de un git repo eliminando archivos (temporales / grandes) de varios lugares en el directorio hierarcy ...

es decir, /root/test/a.txt /root/test2/a.txt

Ahora me gustaría eliminar todas las referencias de ''test / a.txt'' pero mantener la versión /test2/a.txt ..

¿Hay alguna manera de eliminar de forma limpia el uso de BFG? (como se menciona en https://help.github.com/articles/remove-sensitive-data )

Dado que el repositorio tiene una historia bastante grande (10K confirmados), BFG es mucho más rápido que los otros métodos que he visto hasta ahora ...