Hub documentation

Supprimer les données sensibles d'un dépôt

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

Supprimer les données sensibles d'un dépôt

Cette page ne s’applique qu’aux dépôts gérés par git (modèles, jeux de données et Spaces).

Si vous avez commité un secret, des données privées ou tout fichier que vous ne souhaitez pas voir sur le Hub, le supprimer dans un nouveau commit ne suffit pas : les anciens commits le contiennent toujours, et des URL telles que /resolve/<old_sha>/<path>, /blob/<old_sha>/<path> ou /commit/<old_sha> continuent de le servir. Pour supprimer définitivement un fichier, retirez-le de toutes les refs qui peuvent y accéder : branches, tags et pull requests.

Si le fichier contient un secret (jeton, clé API, mot de passe), révoquez-le ou faites-le pivoter d’abord et considérez-le comme compromis : des copies mises en cache par le CDN ou téléchargées par des utilisateurs peuvent subsister après sa suppression. Pour les jetons Hugging Face, consultez Révoquer un jeton fuité.

Aperçu

ActionSupprimeFeuilles
Supprimer le fichier dans un nouvel engagementLe fichier de la dernière révisionTous les commits précédents, donc insuffisant à lui seul
Lister les gros fichiers → supprimer avec « réécriture de l’historique »Le contenu du fichier (immédiatement), ainsi que son pointeur depuis toutes les branches, les étiquettes et les références de PRAnciens commits avec le chemin du fichier, le sha256 et la taille, jusqu’au nettoyage
git filter-repo + force-pushLe fichier de chaque branche et de chaque étiquette que vous poussezRéférences que vous ne poussez pas, historique verrouillé par les demandes de tirage
super_squash_historyL’historique d’une brancheAutres branches, étiquettes, historique épinglés par des demandes de tirage
Supprimer la pull requestLa référence de la PR, l’historique des publications, seul cela a été conservéCette historique, jusqu'au nettoyage

Réécrire l’historique (toute option sauf un nouveau commit) est irréversible et modifie les SHAs des commits. Les collaborateurs utilisant git doivent recloner, ou réinitialiser leurs branches sur les branches réécrites, et ne doivent surtout pas pousser leur ancien historique, ce qui réintroduirait le fichier.

Ordre recommandé

  1. Révoquez ou faites pivoter tout secret divulgué.
  2. Supprimer les fichiers LFS et Xet avec « rewrite history ».
  3. Supprimez les fichiers git réguliers de chaque branche et de chaque étiquette.
  4. Pour les fichiers git classiques, supprimez les pull requests ouvertes après l'engagement du fichier.
  5. Nettoyez les dépôts dupliqués dont vous êtes propriétaires.
  6. Contactez-nous si nécessaire.

Fichiers LFS et Xet

Si le fichier apparaît dans « List Large Files » de votre dépôt (cela inclut les fichiers gérés par Xet) :

  1. Accédez à la page Paramètres de votre dépôt.
  2. Cliquez sur « List Large Files » dans la section « Storage ».
  3. Supprimez le fichier en laissant la case « rewrite history » cochée (par défaut).

Supprimer un gros fichier avec « rewrite history » supprime immédiatement son contenu et retire son pointeur de toutes les branches, tags et références de PR. Cela modifie le SHA du premier commit contenant le fichier ainsi que de tous ses descendants, et supprime les commits restés vides (par exemple, un commit qui n’ajoutait que le fichier). Les anciens commits affichent toujours le chemin, le sha256 et la taille du fichier jusqu’à ce qu’ils soient nettoyés. Consultez Limites de stockage pour plus de détails.

Si le chemin ou le nom du fichier est lui-même sensible, il reste dans ces anciens commits jusqu’à ce qu’ils soient nettoyés. « Réécrire l’historique » le supprime avec eux.

Fichiers git classiques

Option 1 : réécrire l’historique avec git filter-repo et effectuer un force-push sur chaque branche et chaque tag contenant le fichier. Le force-push est autorisé pour les utilisateurs disposant d’un accès en écriture.

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 origin

Option 2 : supprimer le fichier et écraser l’historique avec super_squash_history. Chaque appel écrase une seule branche en un seul commit, il faut donc le répéter pour chaque branche concernée et supprimer les branches et les tags dont vous n’avez pas besoin.

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")

Demandes de tirage

Cela ne s'applique qu'aux fichiers git classiques : la suppression d'un gros fichier avec « rewrite history » réécrit déjà les pull requests.

Toute pull request ouverte après l’engagement du fichier conserve cette histoire accessible par SHA, même après une réécriture ou un squash de main, et même si la PR a été fusionnée ou fermée. Supprimer la pull request libère cette histoire, qui est ensuite nettoyée.

Dépôts dupliqués

Les dépôts dupliqués sont indépendants, il convient donc de nettoyer ceux que vous possédez de la même manière. Les doublons de modèles et de jeux de données ne contiennent que les fichiers de main au moment de la duplication (sous forme d’un seul commit), tandis que les doublons de Spaces conservent l’historique complet de main. Les autres branches et étiquettes ne sont pas copiées.

Quand les anciens commits disparaissent

Les anciens commits restent accessibles par leur SHA (dans l’interface web, l’API et avec git fetch <sha>) jusqu’à leur nettoyage, qui a généralement lieu dans l’heure suivant un force-push, un super_squash_history, une suppression « rewrite history » ou la suppression de la pull request qui les conservait.

Quand nous contacter

  • Vous avez besoin d'URL de commits anciens qui sont garanties de renvoyer 404
  • Vous devez invalider les téléchargements mis en cache
  • Vous devez réinitialiser les copies dérivées, telles que les conversions Parquet de Data Studio (refs/convert/*) ou les builds de Space
Update on GitHub