- بواسطة x32x01 ||
فيه حاجة اكتشفتها من يومين وفرحتني جدًا 😍
وبالرغم إنها موجودة من سنين… حسيت إني لسه مكتشف كنز 😂
فلو انت عارفها خلاص اعمل سكيب كأنك مشوفتش حاجة 🫣
وكل commit بيتخزن عندك Local جوه فولدر اسمه:
وده معناه إن:
حجم الريبو بيكبر جدًا مع الوقت.
لكن لو عملت clone للريبو من GitHub 👀
هتتفاجئ إن الحجم ممكن يوصل لأكتر من 14 جيجا!
ليه؟
لأن الريبو شايل:
تخيل بقى إن مشروعك فيه:
كل تعديل = نسخة جديدة في Git
والنتيجة؟
الريبو هيكبر بشكل مش عملي خالص.
الفكرة بسيطة جدًا 👇
بدل ما Git يخزن الملف الكبير نفسه جوه الريبو،
بيخزن Pointer صغير بيشاور على مكان الملف الحقيقي.
والملف الحقيقي بيتخزن على سيرفر مخصص للـ LFS.
لو فتحت ملف متخزن بـ LFS على GitHub هتلاقيه مكتوب:
هيضيف سطر في ملف:
من اللحظة دي 👇
Git هيخزن Pointer في الريبو
والملف الحقيقي يترفع على LFS Server.
لأن
Git LFS بس هو اللي ينزل النسخة المطلوبة وقتها.
فلو حاولت ترفع ملف أكبر هتاخد error.
Git LFS بيحل المشكلة دي من الأساس 👌
لازم:
يبقى لازم تتعلم تستخدم Git LFS.
هيوفر عليك:
وبالرغم إنها موجودة من سنين… حسيت إني لسه مكتشف كنز 😂
فلو انت عارفها خلاص اعمل سكيب كأنك مشوفتش حاجة 🫣
ليه حجم الـ Git Repository بيكبر مع الوقت؟ 🤔
كلنا عارفين إن Git بيحفظ كل التعديلات على شكل commits.وكل commit بيتخزن عندك Local جوه فولدر اسمه:
.gitوده معناه إن:
- كل تعديل اتحفظ
- كل نسخة قديمة موجودة
- تقدر ترجع لأي commit قديم
حجم الريبو بيكبر جدًا مع الوقت.
مثال مرعب من Linux Kernel 😅
لو نزلت Linux Kernel من الموقع الرسمي هتلاقي الحجم بعد فك الضغط حوالي 700 ميجا تقريبًا.لكن لو عملت clone للريبو من GitHub 👀
هتتفاجئ إن الحجم ممكن يوصل لأكتر من 14 جيجا!
ليه؟
لأن الريبو شايل:
- تاريخ كامل
- أكتر من مليون ونص commit
- كل التعديلات محفوظة جوه .git
المشكلة الحقيقية… لما يكون عندك ملفات تقيلة 😬
المثال اللي فات كان كود بس.تخيل بقى إن مشروعك فيه:
- فيديوهات بجودة عالية 🎥
- صور RAW 📷
- موديلات AI 🧠
- ملفات Build ضخمة
كل تعديل = نسخة جديدة في Git
والنتيجة؟
الريبو هيكبر بشكل مش عملي خالص.
الحل السحري: Git LFS 👌🚀
هنا بقى ييجي دور Git LFS (Large File Storage).الفكرة بسيطة جدًا 👇
بدل ما Git يخزن الملف الكبير نفسه جوه الريبو،
بيخزن Pointer صغير بيشاور على مكان الملف الحقيقي.
والملف الحقيقي بيتخزن على سيرفر مخصص للـ LFS.
لو فتحت ملف متخزن بـ LFS على GitHub هتلاقيه مكتوب:
Stored with Git LFSGit LFS بيشتغل إزاي عمليًا؟ 💻
1️⃣ تثبيت Git LFS
Code:
git lfs install 2️⃣ تحديد نوع الملفات اللي عايز تخزنها بـ LFS
مثلاً لو عندك ملفات mp4:git lfs track "*.mp4"هيضيف سطر في ملف:
.gitattributes3️⃣ تضيف وتعمل commit عادي جدًا
Code:
git add .
git commit -m "Add video files with LFS"
git push origin main Git هيخزن Pointer في الريبو
والملف الحقيقي يترفع على LFS Server.
الفرق في الحجم هيكون قد إيه؟ 😮
بدل ما الريبو يبقى 5 أو 10 جيجا… ممكن يبقى 200 أو 300 ميجا بس.لأن
.git بقى فيه:- Pointers صغيرة
- مش ملفات ضخمة
Git LFS بس هو اللي ينزل النسخة المطلوبة وقتها.
مشكلة GitHub مع الملفات الكبيرة 🚫
GitHub أصلًا مش بيقبل ترفع ملف أكبر من: 100MBفلو حاولت ترفع ملف أكبر هتاخد error.
Git LFS بيحل المشكلة دي من الأساس 👌
Git LFS مش خاص بـ GitHub بس 🌍
مهم تعرف إن Git LFS:- مش خدمة خاصة بـ GitHub
- هو Extension لـ Git نفسه
- GitLab
- Bitbucket
- سيرفر Git داخلي في شركتك
امتى تستخدم Git LFS؟ 🧠
لو شغلك فيه:- Machine Learning Models
- Datasets ضخمة
- صور عالية الجودة
- ملفات build تقيلة
- مشاريع Games فيها Assets كبيرة
الفرق التقني بين Git العادي و Git LFS 📊
| Git العادي | Git LFS |
|---|---|
| يخزن الملف كامل في كل commit | يخزن Pointer بس |
| حجم الريبو بيكبر جدًا | الحجم ثابت تقريبًا |
| مشاكل مع الملفات >100MB | يحل المشكلة |
ملحوظة مهمة جدًا ⚠️
Git LFS مش معناه إنك ترمي أي حاجة وخلاص.لازم:
- تختار أنواع ملفات معينة
- متحطش ملفات Build مؤقتة
- تستخدم .gitignore صح
.gitignore بسيط: Code:
node_modules/
dist/
build/ خلاصة الكلام 💬
لو مشروعك فيه ملفات تقيلة ومش عايز الريبو يكبر بطريقة مرعبة…يبقى لازم تتعلم تستخدم Git LFS.
هيوفر عليك:
- مساحة
- وقت
- مشاكل push
- وجع دماغ في المستقبل