Hub documentation

리포지토리에서 민감한 데이터 제거

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

리포지토리에서 민감한 데이터 제거

이 페이지는 git 기반 저장소(모델, 데이터셋, Spaces)에만 적용됩니다.

Hub에 원치 않는 시크릿, 개인 데이터 또는 파일을 커밋한 경우, 새 커밋에서 삭제하는 것만으로는 충분하지 않습니다. 이전 커밋에는 여전히 해당 파일이 남아 있으며, /resolve/<old_sha>/<path>, /blob/<old_sha>/<path> 또는 /commit/<old_sha>와 같은 URL을 통해 계속 제공됩니다. 파일을 완전히 제거하려면 해당 파일에 접근할 수 있는 모든 ref, 즉 브랜치, 태그, pull request에서 파일을 제거해야 합니다.

파일에 비밀 정보(토큰, API 키, 비밀번호)가 포함되어 있다면, 먼저 이를 폐기하거나 교체하고 유출된 것으로 간주해야 합니다. CDN에 캐시된 사본이나 사용자가 다운로드한 사본은 파일이 삭제된 후에도 남아 있을 수 있기 때문입니다. Hugging Face 토큰의 경우 유출된 토큰 폐기를 참고하세요.

개요

액션제거잎
새 커밋에서 파일을 삭제합니다최신 리비전의 파일이전 커밋을 모두 포함하므로, 이것만으로는 충분하지 않습니다
대형 파일 나열 → “rewrite history”로 삭제파일 내용(즉시) 및 모든 브랜치, 태그, PR 레퍼런스에서 해당 파일에 대한 포인터파일 경로, sha256 및 크기를 포함한 이전 커밋, 정리까지
git filter-repo + force-push푸시하는 모든 브랜치와 태그의 파일푸시하지 않는 Refs, pull request에 고정된 히스토리
super_squash_history한 가지 분기의 히스토리Pull request에 고정된 다른 브랜치, 태그, 히스토리
풀 리퀘스트 삭제PR ref, 릴리스 히스토리만 유지그 히스토리는 정리까지

git을 사용하는 협업자는 다시 클론을 생성하거나, 브랜치를 재작성된 브랜치로 리셋해야 하며, 파일을 다시 도입하게 되는 오래된 히스토리를 다시 푸시해서는 안 됩니다.

권장 순서

  1. 누출된 시크릿을 모두 폐기하거나 교체하세요.
  2. “rewrite history”로 LFS 및 Xet 파일을 제거합니다.
  3. 모든 branch와 tag에서 일반적인 git 파일을 제거합니다.
  4. 일반적인 git 파일의 경우, 해당 파일이 커밋된 이후에 열린 pull requests를 삭제합니다.
  5. 소유하고 있는 중복된 저장소를 정리하세요.
  6. 필요한 경우 문의해 주세요.

LFS 및 Xet 파일

…

  1. 리포지토리의 Settings 페이지로 이동합니다.
  2. Storage 섹션의 List Large Files를 클릭합니다.
  3. rewrite history가 선택된 상태(기본값)로 파일을 삭제합니다.

“rewrite history”를 사용하여 대용량 파일을 삭제하면 파일 내용이 즉시 제거되고 모든 branch, tag 및 PR ref에서 해당 파일의 포인터가 제거됩니다. 이 작업은 해당 파일을 포함하는 첫 번째 커밋과 모든 후속 커밋의 SHA를 변경하며, 빈 커밋으로 남는 경우(예: 파일만 추가한 커밋)는 삭제됩니다. 이전 커밋에는 파일의 경로, sha256 및 크기가 정리될 때까지 표시됩니다. 자세한 내용은 Storage Limits를 참조하세요.

파일의 경로나 이름 자체가 민감한 경우, 정리될 때까지 해당 파일은 이전 커밋에 그대로 남아 있습니다. “Rewrite history”를 사용하면 해당 파일도 함께 제거됩니다.

일반적인 git 파일

옵션 1: git filter-repo로 히스토리를 다시 작성하고 해당 파일이 포함된 모든 브랜치와 태그를 force-push합니다. force-push는 쓰기 권한이 있는 사용자에게 허용됩니다.

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

옵션 2: 파일을 삭제하고 히스토리를 압축하려면 super_squash_history를 사용하세요. 각 호출은 단일 브랜치를 하나의 커밋으로 압축하므로, 영향을 받는 모든 브랜치에 대해 반복 호출하고 필요하지 않은 브랜치와 태그를 삭제하세요.

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

Pull requests

이 내용은 일반 git 파일에만 적용됩니다. “rewrite history”를 사용하여 큰 파일을 삭제하면 pull request가 이미 다시 작성됩니다.

파일이 커밋된 이후에 열린 모든 pull request는 main을 다시 작성하거나 squash하더라도, 그리고 PR이 병합되거나 닫혔더라도 SHA를 통해 해당 히스토리에 접근할 수 있게 유지합니다. pull request를 삭제하면 해당 히스토리가 해제되고, 이후 정리됩니다.

중복된 저장소

복제된 저장소는 독립적이므로, 소유한 저장소를 동일한 방식으로 정리하십시오. 모델 및 데이터셋의 복제본에는 복제 시점의 main 파일만 단일 커밋으로 포함되며, Space의 복제본은 main의 전체 히스토리를 유지합니다. 다른 브랜치와 태그는 복사되지 않습니다.

git rebase를 수행하면 커밋이 사라질 수 있습니다

오래된 커밋은 SHA를 통해(웹 UI, API, git fetch <sha>) 접근할 수 있으며, 이는 대개 force-push, super_squash_history, “rewrite history” 삭제, 또는 해당 커밋을 유지하던 pull request 삭제 후 약 1시간 이내에 정리됩니다.

문의가 필요한 경우

  • 404를 반환하는 것이 보장된 이전 커밋 URL이 필요합니다
  • 캐시된 다운로드가 무효화되어야 합니다
  • Data Studio Parquet 변환(refs/convert/*)이나 Space 빌드와 같이 파생된 복사본의 리셋이 필요합니다
Update on GitHub