Hub documentation
Xóa Dữ Liệu Nhạy Cảm khỏi Kho
Xóa Dữ Liệu Nhạy Cảm khỏi Kho
Trang này chỉ áp dụng cho các kho lưu trữ dựa trên git (mô hình, bộ dữ liệu và Spaces).
Nếu bạn đã commit một bí mật, dữ liệu riêng tư hoặc bất kỳ tệp nào không muốn xuất hiện trên Hub, việc xóa nó trong một commit mới là chưa đủ: các commit cũ vẫn chứa tệp đó, và các URL như /resolve/<old_sha>/<path>, /blob/<old_sha>/<path> hoặc /commit/<old_sha> vẫn tiếp tục phục vụ tệp đó. Để xóa hoàn toàn một tệp, hãy xóa nó khỏi mọi ref có thể truy cập đến tệp đó: các branch, tag và pull request.
Nếu tệp chứa thông tin bí mật (token, API key, mật khẩu), hãy thu hồi hoặc xoay vòng nó trước tiên và coi nó đã bị lộ: các bản sao được CDN cache hoặc do người dùng tải xuống có thể tồn tại lâu hơn cả việc xóa tệp. Đối với token của Hugging Face, xem Thu hồi token bị lộ.
Tổng quan
| Hành động | Xóa | Lá |
|---|---|---|
| Xóa tệp trong một commit mới | Tệp từ bản sửa đổi mới nhất | Tất cả các commit trước đó, vì vậy không đủ khi đứng một mình |
| Liệt kê các tệp lớn → xóa bằng “viết lại lịch sử” | Nội dung tệp (ngay lập tức), cùng con trỏ của nó từ tất cả các nhánh, thẻ và tham chiếu PR | Các commit cũ với đường dẫn tệp, sha256 và kích thước, cho đến khi dọn dẹp |
git filter-repo + force-push | Tệp từ mọi nhánh và thẻ bạn đẩy lên | Các Refs bạn không đẩy lên, lịch sử bị cố định bởi các pull request |
super_squash_history | Lịch sử của một nhánh | Các nhánh, thẻ, lịch sử được ghim bởi các yêu cầu kéo |
| Xóa pull request | Tham chiếu PR, lịch sử phát hành chỉ được giữ lại | Lịch sử đó, cho đến khi dọn dẹp |
Việc viết lại lịch sử (mọi tùy chọn ngoại trừ một commit mới) là không thể đảo ngược và sẽ thay đổi các SHA của commit. Các cộng tác viên sử dụng git nên clone lại, hoặc đặt lại các nhánh của họ lên các nhánh đã được viết lại, và không được đẩy lịch sử cũ của họ trở lại, điều này sẽ đưa tệp đó trở lại.
Thứ tự được khuyến nghị
- Thu hồi hoặc xoay vòng bất kỳ bí mật nào bị lộ.
- Xóa file LFS và Xet bằng “rewrite history”.
- Xóa các tệp git thông thường khỏi mọi nhánh và thẻ.
- Đối với các tệp git thông thường, hãy xóa các pull requests được mở sau khi tệp được commit.
- Dọn dẹp các lưu trữ bị trùng lặp do bạn sở hữu.
- Liên hệ với chúng tôi nếu cần.
Tệp LFS và Xet
Nếu tệp xuất hiện trong “List Large Files” của kho lưu trữ của bạn (bao gồm cả các tệp được hỗ trợ bởi Xet):
- Chuyển đến trang Cài đặt của kho lưu trữ của bạn.
- Nhấp vào “List Large Files” trong phần “Storage”.
- Xóa tệp, giữ nguyên tùy chọn “rewrite history” được đánh dấu (mặc định).
Việc xóa một tệp lớn bằng “rewrite history” sẽ loại bỏ nội dung của nó ngay lập tức và gỡ bỏ con trỏ của tệp khỏi mọi nhánh, tag và PR ref. Thao tác này làm thay đổi SHA của commit đầu tiên chứa tệp và tất cả các commit kế thừa sau đó, đồng thời loại bỏ các commit bị để trống (ví dụ: commit chỉ thêm tệp). Các commit cũ vẫn hiển thị đường dẫn, sha256 và kích thước của tệp cho đến khi chúng được dọn dẹp. Xem Storage Limits để biết thêm chi tiết.
Nếu đường dẫn hoặc tên tệp bản thân nó nhạy cảm, nó vẫn nằm trong các commit cũ đó cho đến khi chúng được dọn dẹp. “Viết lại lịch sử” sẽ xóa nó cùng với chúng.
Các tệp git thông thường
Tùy chọn 1: viết lại lịch sử bằng git filter-repo và force-push mọi nhánh và tag chứa tệp đó. Force-push được phép cho người dùng có quyền ghi.
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 originTùy chọn 2: xóa tệp và nén lịch sử bằng super_squash_history. Mỗi lần gọi sẽ nén một nhánh duy nhất thành một commit, vì vậy hãy lặp lại thao tác này cho mọi nhánh bị ảnh hưởng và xóa các nhánh cùng tag không cần thiết.
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")Yêu cầu kéo
Điều này chỉ áp dụng cho các tệp git thông thường: việc xóa một tệp lớn bằng “rewrite history” đã tự động viết lại các pull request.
Bất kỳ pull request nào được mở sau khi file được commit sẽ giữ cho lịch sử đó có thể truy cập được qua SHA, ngay cả khi bạn viết lại hoặc squash main, và ngay cả khi PR đã được merge hoặc đóng. Xóa pull request sẽ giải phóng lịch sử đó, sau đó nó sẽ được dọn dẹp.
Các kho lưu trữ bị trùng
Các kho sao chép là độc lập, vì vậy hãy dọn dẹp các kho do bạn sở hữu theo cách tương tự. Bản sao của model và dataset chỉ chứa các tệp của main tại thời điểm sao chép (dưới dạng một commit duy nhất), trong khi bản sao của Space giữ nguyên toàn bộ lịch sử của main. Các nhánh và tag khác không được sao chép.
Khi các commit cũ biến mất
Các commit cũ vẫn có thể truy cập được thông qua SHA của chúng (trong giao diện web, API và bằng lệnh git fetch <sha>) cho đến khi được dọn dẹp, điều này thường xảy ra trong khoảng một giờ sau khi force-push, super_squash_history, xóa kiểu “rewrite history”, hoặc xóa pull request đã giữ chúng lại.
Khi nào cần liên hệ với chúng tôi
- Bạn cần các URL commit cũ được đảm bảo trả về 404
- Bạn cần các bản tải đã được lưu trong bộ nhớ đệm bị vô hiệu hóa
- Bạn cần đặt lại các bản sao dẫn xuất, chẳng hạn như các bản chuyển đổi Parquet của Data Studio (
refs/convert/*) hoặc các bản build của Space