Hub documentation
Eliminar datos sensibles de un repositorio
Eliminar datos sensibles de un repositorio
Esta página solo se aplica a los repositorios basados en git (modelos, conjuntos de datos y Spaces).
Si has enviado un secreto, datos privados o cualquier archivo que no quieras en el Hub, eliminarlo en un nuevo commit no es suficiente: los commits anteriores aún lo contienen, y las URL como /resolve/<old_sha>/<path>, /blob/<old_sha>/<path> o /commit/<old_sha> siguen sirviéndolo. Para eliminar un archivo por completo, elimínalo de cada ref que pueda acceder a él: ramas, etiquetas y pull requests.
Si el archivo contiene un secreto (token, clave de API, contraseña), revócalo o rótalo primero y trátalo como comprometido: las copias almacenadas en caché por el CDN o descargadas por los usuarios pueden persistir más allá de su eliminación. Para los tokens de Hugging Face, consulta Revocación de un token filtrado.
Resumen
| Acción | Elimina | Hojas |
|---|---|---|
| Eliminar el archivo en un nuevo commit | El archivo de la última revisión | Todos los commits anteriores, por lo que no es suficiente por sí solo |
| Listar archivos grandes → eliminar con “reescritura del historial” | El contenido del archivo (inmediatamente), y su puntero desde todas las ramas, etiquetas y referencias de PR | Commits antiguos con la ruta del archivo, sha256 y tamaño, hasta la limpieza |
git filter-repo + force-push | El archivo de cada rama y etiqueta que envías | Refs que no se envían, historial fijado por solicitudes de extracción |
super_squash_history | El historial de una rama | Otros branches, tags, historial fijado por pull requests |
| Eliminar la solicitud de extracción | La referencia del PR, solo se conservó el historial de lanzamientos | Ese historial, hasta la limpieza |
Reescribir el historial (cualquier opción excepto un nuevo commit) es irreversible y cambia los SHAs de los commits. Los colaboradores que usen git deben reclonar, o restablecer sus ramas sobre las reescritas, y no deben volver a enviar su historial antiguo, ya que eso reintroduciría el archivo.
Orden recomendado
- Revoca o rota cualquier secreto filtrado.
- Elimina los archivos de LFS y Xet con “rewrite history”.
- Elimina los archivos git habituales de cada rama y etiqueta.
- Para los archivos de git habituales, elimina los pull requests abiertos después de que se haya realizado el commit del archivo.
- Limpia los repositorios duplicados que posees.
- Contáctenos si es necesario.
Archivos LFS y Xet
Si el archivo aparece en “List Large Files” de tu repositorio (esto incluye los archivos respaldados por Xet):
- Ve a la página de Configuración de tu repositorio.
- Haz clic en “List Large Files” en la sección “Storage”.
- Elimine el archivo, manteniendo marcada la opción “rewrite history” (el valor predeterminado).
Eliminar un archivo grande con “rewrite history” elimina su contenido de inmediato y quita su puntero de cada rama, etiqueta y referencia de PR. Esto cambia el SHA del primer commit que contiene el archivo y de todos sus descendientes, y elimina los commits que quedan vacíos (p. ej., uno que solo añadió el archivo). Los commits antiguos siguen mostrando la ruta, el sha256 y el tamaño del archivo hasta que se limpien. Consulta Storage Limits para más detalles.
Si la ruta o el nombre del archivo es sensible en sí mismo, permanece en esos antiguos commits hasta que se limpien. “Reescribir el historial” lo elimina junto con ellos.
Archivos git habituales
Opción 1: reescribir el historial con git filter-repo y hacer un force-push de cada rama y etiqueta que contenga el archivo. El force-push está permitido para usuarios con acceso de escritura.
git clone https://huggingface.co/<namespace>/<repo> # use /datasets/ or /spaces/ for those repo types
cd <repo>
git filter-repo --invert-paths --path path/to/file
git remote add origin https://huggingface.co/<namespace>/<repo> # filter-repo removes the remote
git push --force --all origin
git push --force --tags originOpción 2: eliminar el archivo y comprimir el historial con super_squash_history. Cada llamada comprime una rama en un solo commit, así que repítelo para cada rama afectada y elimina las ramas y etiquetas que no necesites.
from huggingface_hub import HfApi
api = HfApi()
api.delete_file("path/to/file", repo_id="<namespace>/<repo>")
api.super_squash_history(repo_id="<namespace>/<repo>", branch="main")
api.delete_tag(repo_id="<namespace>/<repo>", tag="v1.0")Solicitudes de extracción
Esto solo se aplica a archivos git regulares: eliminar un archivo grande con “rewrite history” ya reescribe las pull requests.
Cualquier solicitud de extracción (pull request) abierta después de que se haya confirmado el archivo mantiene ese historial accesible por SHA, incluso una vez que se reescribe o comprime main, y aunque la solicitud de extracción se haya fusionado o cerrado. Eliminar la solicitud de extracción libera ese historial, que luego se limpia.
Repositorios duplicados
Los repositorios duplicados son independientes, por lo que debe limpiar los que posee de la misma manera. Los duplicados de modelos y conjuntos de datos solo contienen los archivos de main en el momento de la duplicación (como un único commit), mientras que los duplicados de Space conservan el historial completo de main. No se copian otras ramas ni etiquetas.
Cuando los commits antiguos desaparecen
Los commits antiguos siguen siendo accesibles por su SHA (en la interfaz web, la API y con git fetch <sha>) hasta que se limpian, lo cual suele ocurrir aproximadamente una hora después de un force-push, un super_squash_history, una eliminación de “rewrite history” o la eliminación de la pull request que los mantenía.
Cuándo contactarnos
- Necesitas URLs de commits antiguos que estén garantizadas para devolver 404
- Necesitas invalidar las descargas en caché
- Necesitas restablecer las copias derivadas, como las conversiones de Parquet de Data Studio (
refs/convert/*) o las compilaciones de Space