Hub documentation
إزالة البيانات الحساسة من المستودع
إزالة البيانات الحساسة من المستودع
تنطبق هذه الصفحة على المستودعات المدعومة بواسطة git (النماذج، مجموعات البيانات، وSpaces) فقط.
إذا قمت بتضمين سر أو بيانات خاصة أو أي ملف لا تريد وجوده على Hub، فإن حذفه في التزام الجديد لا يكفي: فالتزامات الأقدم لا تزال تحتوي عليه، وتبقى الروابط مثل /resolve/<old_sha>/<path> و/blob/<old_sha>/<path> أو /commit/<old_sha> تقدمه. لإزالة ملف بالكامل، احذفه من كل مرج يمكن الوصول إليه: الفروع، والوسوم، وطلبات الدمج.
إذا احتوى الملف على سر (رمز، مفتاح API، كلمة مرور)، فاسحب أو بدّله أولاً واعتبره مُخترقًا: فقد تبقى النسخ المخزّنة مؤقتًا بواسطة CDN أو التي حمّلها المستخدمون بعد إزالته. لمعرّفات Hugging Face، راجع سحب رمز مسرّب.
نظرة عامة
| إجراء | يزيل | الأوراق |
|---|---|---|
| احذف الملف في التزام الجديد | الملف من أحدث مراجعة | جميع التعلّمات السابقة، لذا لا تكفي بمفردها |
| قائمة الملفات الكبيرة → حذف باستخدام “إعادة كتابة التاريخ” | محتوى الملف (فوراً)، ومؤشره من جميع الفروع والوسوم ومرجعيات طلبات الدمج | التزامات قديمة تتضمن مسار الملف وsha256 وحجمه، حتى التنظيف |
git filter-repo + دفع قسري | الملف من كل فرع ووسم تقوم بدفعه | مرجعيات لا تُدفع، وسجل مثبت بطلبات السحب |
super_squash_history | تاريخ فرع واحد | فروع أخرى، وسوم، سجل مثبت بواسطة طلبات الدمج |
| حذف طلب الدمج | مرجع طلب الدمج، سجل الإصدارات، تم الاحتفاظ به فقط | تلك السجلات، حتى التنظيف |
إعادة كتابة التاريخ (كل خيار باستثناء إنشاء التزام الجديد) غير قابلة للتراجع وتُغيّر معرّفات SHA للالتزامات. على المتعاونين الذين يستخدمون git إعادة الاستنساخ، أو إعادة ضبط فروعهم على الفروع المُعاد كتابتها، ولا يجوز لهم دفع تاريخهم القديم مرة أخرى، لأن ذلك سيُعيد إدخال الملف.
الترتيب الموصى به
- اسحب أو بدّل أي سرّ مسرّب.
- احذف ملفات LFS وXet باستخدام «rewrite history».
- احذف ملفات git العادية من كل فرع ووسم.
- بالنسبة إلى ملفات git العادية، احذف طلبات الدمج التي فُتحت بعد إدراج الملف.
- قم بتنظيف المستودعات المكررة التي تملكها.
- تواصل معنا عند الحاجة.
ملفات LFS و Xet
إذا ظهر الملف في قائمة “List Large Files” في مستودعك (يشمل ذلك الملفات المدعومة بواسطة Xet):
- انتقل إلى صفحة الإعدادات في مستودعك.
- انقر على “List Large Files” في قسم “Storage”.
- احذف الملف مع إبقاء خيار «إعادة كتابة التاريخ» محددًا (وهو الإعداد الافتراضي).
حذف ملف كبير باستخدام «إعادة كتابة التاريخ» يزيل محتواه فورًا ويحذف مؤشره من كل فرع ووسم ومرجع طلب سحب. يؤدي هذا إلى تغيير معرّف SHA لأول التزامن الذي يحتوي على الملف وكل التزامنات نسله، كما يزيل التزامنات تصبح فارغة (مثل التزامن أضاف الملف فقط). لا تزال التزامنات القديمة تعرض مسار الملف ومعرّف sha256 وحجمه حتى يتم تنظيفها. راجع حدود التخزين لمزيد من التفاصيل.
إذا كان مسار الملف أو اسمه حساسًا بحد ذاته، فإنه يبقى في تلك الالتزامات القديمة حتى يتم تنظيفها. يؤدي «إعادة كتابة التاريخ» إلى إزالته معها.
ملفات git العادية
الخيار 1: إعادة كتابة التاريخ باستخدام git filter-repo ودفع كل فرع ووسم يحتوي على الملف قسراً. يُسمح للمستخدمين الذين لديهم صلاحية الكتابة بالدفع القسري.
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")طلبات السحب
ينطبق هذا فقط على ملفات git العادية: فحذف ملف كبير باستخدام «إعادة كتابة التاريخ» يعيد كتابة طلبات الدمج مسبقًا.
أي طلب سحب يُفتح بعد أن تمّ الالتزام بالملف يحافظ على إمكانية الوصول إلى تلك السجلّات عبر المعرّف SHA، حتى بعد إعادة كتابة أو دمج main، وحتى إذا تمّ دمج طلب السحب أو إغلاقه. يؤدي حذف طلب السحب إلى تحرير تلك السجلّات، والتي يتمّ تنظيفها بعد ذلك.
المستودعات المكررة
المستودعات المكررة المستودعات المكررة مستقلة، لذا نظّف تلك التي تملكها بالطريقة نفسها. تحتوي نسخ النماذج ومجموعات البيانات على ملفات main فقط في وقت النسخ (كالتزام واحد)، بينما تحتفظ نسخ المساحات بسجل main الكامل. لا يتم نسخ الفروع والوسوم الأخرى.
عند اختفاء الالتزامات القديمة
تبقى الالتزامات القديمة قابلة للوصول عبر معرف SHA الخاص بها (في واجهة الويب، وواجهة برمجة التطبيقات، وعن طريق git fetch <sha>) حتى يتم تنظيفها، وهو ما يحدث عادةً خلال ساعة تقريبًا بعد دفع قسري، أو super_squash_history، أو حذف «إعادة كتابة التاريخ»، أو حذف طلب الدمج الذي كان يحافظ عليها.
متى تتواصل معنا
- تحتاج إلى عناوين URL لالتزامات قديمة مضمون أن تعيد 404
- تحتاج إلى تعطيل التحميلات المخزنة مؤقتًا
- تحتاج إلى إعادة تعيين النسخ المشتقة، مثل تحويلات Data Studio Parquet (
refs/convert/*) أو عمليات بناء Space