# التوافق العكسي مع LFS

تستمر عمليات الرفع من العملاء التقليديين أو غير المدركين لـ Xet في اتباع مسار Git LFS القياسي، حتى لو كان المستودع مدعومًا بالفعل بتخزين Xet. بمجرد رفع الملف إلى LFS، تقوم عملية في الخلفية تلقائيًا بنقل الملف لاستخدام تخزين Xet. يوفر بنية Xet توافقًا عكسيًا للعملاء التقليديين الذين يقومون بتنزيل الملفات من المستودعات المدعومة بـ Xet، وذلك من خلال توفير جسر Git LFS. بينما سيتلقى العميل المدرك لـ Xet معلومات إعادة بناء الملف من CAS لتنزيل الملف المدعوم بـ Xet، فإن العميل التقليدي سيحصل على رابط واحد من الجسر يقوم بعمل إعادة بناء الملف المطلوب وإرجاع الرابط إلى المورد. وهذا يتيح تنزيل الملفات عبر رابط، مما يتيح لك الاستمرار في استخدام واجهة الويب الخاصة بـ Hub أو `curl`. من خلال جعل عمليات رفع ملفات LFS تنتقل تلقائيًا، وإبقاء العملاء الأقدم مستمرة في تنزيل الملفات من المستودعات المدعومة بـ Xet، يمكن للمحافظين وبقية فريق Hub تحديث خطوط أنابيبهم الخاصة بوتيرتهم الخاصة.

توفّر مساحة تخزين Xet انتقالًا سلسًا للمستودعات الموجودة مسبقًا على Hub. لا حاجة لمعرفة ما إذا كان نظام Xet الخلفي مُشترَكًا أم لا. تستمر المستودعات المدعومة من Xet في استخدام صيغة ملفات المؤشر الخاصة بـ Git LFS؛ أما إضافة `Xet backed hash` فتُضاف إلى واجهة الويب فقط كوسيلة لتسهيل الاستخدام. عمليًا، هذا يعني أن المستودعات الموجودة والمستودعات الجديدة التي يتم إنشاؤها لن تبدو مختلفة إذا قمت بعمل `bare clone` لها. ستستمر كل الملفات الكبيرة (أو الملفات الثنائية) في الاحتفاظ بملف مؤشر يتوافق مع مواصفة ملفات المؤشر الخاصة بـ Git LFS.

تتيح هذه التماثلية للعملاء غير المدركين لـ Xet (مثل الإصدارات الأقدم من `huggingface_hub`) التفاعل مع المستودعات المدعومة بواسطة Xet دون أي قلق. في الواقع، يدعم المستودع مزيجًا من الملفات المدعومة بواسطة Git LFS والملفات المدعومة بواسطة Xet. يُظهر نظام التشغيل الخلفي Xet ما إذا كان الملف مخزَّنًا في Git LFS أو في تخزين Xet، مما يتيح للخدمات اللاحقة طلب الروابط المناسبة من S3، بغض النظر عن نظام التخزين الذي يحتفظ بالمحتوى.

## التخزين القديم: Git LFS

يعتمد نظام التخزين القديم على Hub، وهو Git LFS، على العديد من الاتفاقيات نفسها المستخدمة في المستودعات المدعومة من Xet. الخلفية الخلفية لنظام Git LFS على Hub هي [Amazon Simple Storage Service (S3)](https://aws.amazon.com/s3/). عند استدعاء Git LFS، يخزّن محتويات الملف في S3 باستخدام تجزئة SHA256 لتسمية الملف من أجل الوصول إليه في المستقبل. هذه البنية التخزينية بسيطة نسبيًا وقد مكّنت Hub من تخزين ملايين الملفات الخاصة بمستودعات النماذج ومجموعات البيانات والمساحات.

القيود الأساسية لـ Git LFS هي نهجه الذي يركّز على الملفات في إزالة التكرار. أي تغيير في ملف، بغض النظر عن حجم هذا التغيير، يعني أن الملف بأكمله يُخزَّن كنسخة - مما يُحدث أعباءً كبيرة في نقل الملفات، حيث يُرفع الملف بأكمله (عند الالتزام بمستودع) أو يُحمَّل (عند سحب أحدث نسخة إلى جهازك).

يؤدي ذلك إلى تجربة مطوّر أسوأ، إلى جانب تزايد في مساحة التخزين الإضافية.

