مستودع Git — هو مخزن للكود المصدري للمشروع حيث يتتبع Git كل تغيير في الملفات طوال فترة التطوير. يحتوي المستودع على السجل الكامل للالتزامات والفروع والعلامات، مما يسمح للمطورين بالعمل معاً على الكود. وفقاً لـ Git, 2024، يُعتبر المستودع أساس أي نظام للتحكم في الإصدارات ويُستخدم في ملايين المشاريع حول العالم.
أهم النقاط
مستودع Git — هو هيكل بيانات يُخزِّن فيه نظام التحكم في الإصدارات البيانات الوصفية والكائنات التي تصف تاريخ تغييرات ملفات المشروع. عندما يُهيِّئ المطور مستودعاً بأمر git init، ينشئ Git مجلداً مخفياً .git في جذر المشروع.
داخل هذا المجلد توجد جميع الكائنات والمراجع وملفات التهيئة اللازمة لعمل النظام. المستودع غير مرتبط بموقع محدد — يمكن للمطور إنشائه محلياً ثم ربطه بخادم بعيد.
يستخدم Git نموذج المستودع الموزَّع: كل مشارك في المشروع لديه نسخة كاملة من السجل على جهازه. هذا يعني أن معظم العمليات — الالتزام، عرض السجل، إنشاء الفروع — تُنفَّذ محلياً دون الاتصال بالخادم.
وفقاً لتوثيق Git، البنية الموزَّعة تجعل النظام مقاوماً للأعطال: إذا تعطل الخادم، يمكن لأي مستودع محلي أن يكون مصدراً لاستعادة السجل الكامل للمشروع.
المستودع المحلي — هو نسخة من المشروع على جهاز المطور. يحتوي على كل سجل الالتزامات والفروع والعلامات، ويسمح بتنفيذ عمليات الالتزام والتفرع والدمج وإعادة الأساس دون اتصال بالشبكة.
المستودع البعيد — يُستضاف على خادم ويعمل كنقطة مزامنة لجميع أعضاء الفريق. يُرسل المطورون تغييراتهم بأمر git push ويستلمون تغييرات الآخرين بأمر git pull.
يتم تكوين الاتصال بين المستودع المحلي والبعيد عبر remote origin — رابط الخادم المُخزَّن في إعدادات Git. يمكن ربط مستودع محلي واحد بعدة مستودعات بعيدة، وهو أمر مفيد عند العمل مع النسخ المتفرعة.
الميزة الرئيسية لهذا النموذج هي أن المطور يمكنه العمل على الكود في وضع عدم الاتصال ومزامنة التغييرات فقط عندما يكون مستعداً لإرسال النتيجة.
| الخاصية | محلي | بعيد |
|---|---|---|
| الموقع | على جهاز المطور | على خادم (GitHub, GitLab) |
| الوصول دون اتصال | وصول كامل لجميع العمليات | غير متاح دون اتصال |
| المزامنة | دفع/سحب مع البعيد | يستقبل الدفع من المحلي |
| النسخ الاحتياطي | غير محمي من فقدان البيانات | مُخزَّن على خادم بنسخ احتياطية |
نموذج تخزين Git يختلف جوهرياً عن أنظمة التحكم في الإصدارات الأخرى. بدلاً من تخزين قائمة بالتغييرات (الفروقات) بين الإصدارات، يُخزِّن Git لقطات كاملة لجميع ملفات المشروع في لحظة كل التزام.
يتم تعريف كل كائن في المستودع بواسطة تجزئة SHA-1 فريدة مكونة من 40 حرفاً. إذا لم يتغير محتوى الملف بين الالتزامات، لا ينشئ Git كائناً جديداً بل يعيد استخدام الموجود — وهذا يُوفِّر المساحة.
يستخدم Git أربعة أنواع من الكائنات: blob (محتوى الملف)، tree (هيكل الدليل)، commit (لقطة مع بيانات وصفية) وtag (مرجع مسمى إلى التزام). جميع الكائنات مُخزَّنة في مجلد .git/objects.
وفقاً لـ Git Internals، يضمن نموذج كائنات Git سلامة البيانات: أي تغيير في محتوى الملف يُنتج تجزئة جديدة، مما يجعل من المستحيل تغيير السجل دون اكتشاف.
مجلد .git هو قلب المستودع. بدونه، لا يمكن لـ Git تتبع التغييرات، ويبقى الدليل العادي مجرد مجموعة من الملفات. فهم هيكل هذا المجلد يساعد في تشخيص مشاكل المستودع.
ملف HEAD يستحق اهتماماً خاصاً. في الحالة الطبيعية يحتوي على مرجع رمزي إلى فرع، مثلاً ref: refs/heads/main. في حالة detached HEAD يُشير مباشرة إلى التزام — وهذا يعني أن الالتزامات الجديدة لن ترتبط بأي فرع.
العمل مع مستودع Git يتضمن مجموعة من العمليات الأساسية التي يُنفذها المطور يومياً. كل عملية تُغيِّر حالة المستودع بإضافة كائنات جديدة أو نقل المراجع.
عمليتا push وpull هما الوحيدتان اللتان تتطلبان اتصالاً بالخادم البعيد. جميع العمليات الأخرى تُنفَّذ محلياً بالكامل، مما يضمن سرعة عالية حتى مع حجم كبير من السجل.
يمر كل ملف في المستودع بأربع حالات: untracked (غير متتبَّع)، modified (مُعدَّل)، staged (مُحضَّر) وcommitted (مُلتزَم). يتتبَّع Git فقط الملفات التي تمت إضافتها صراحةً عبر git add أو الموجودة بالفعل في سجل الالتزامات.
فهم هذا النموذج هو مفتاح العمل الفعَّال مع Git. يمكن للمطور تحضير جزء فقط من الملفات المُعدَّلة للالتزام بشكل انتقائي، لإنشاء التزامات مكتملة منطقياً مع وصف واضح.
عادةً ما تُستضاف المستودعات البعيدة على منصات متخصصة تُوفِّر واجهة ويب ونظام إدارة وصول وأدوات إضافية للتطوير التعاوني.
اختيار المنصة يعتمد على حجم الفريق ومتطلبات الخصوصية والتكاملات الضرورية. لتطوير التطبيقات المحمولة، غالباً ما يُختار GitHub بسبب الدعم المجتمعي الواسع والتكامل مع أدوات CI/CD لنظامي iOS وAndroid.
لنفكر في سيناريو عملي: مطور ينسخ مستودعاً موجوداً، ينشئ فرعاً جديداً، يُجري تغييرات ويُرسلها إلى الخادم. كل أمر يُوضِّح العمل مع مكونات مختلفة من المستودع.
# استنساخ مستودع بعيد
git clone https://github.com/user/mobile-app.git
# الانتقال إلى دليل المشروع
cd mobile-app
# إنشاء فرع جديد والتبديل إليه
git checkout -b feature/auth
# التحقق من حالة الملفات المعدلة
git status
# إضافة جميع التغييرات إلى منطقة الإعداد
git add .
# إنشاء التزام مع وصف
git commit -m "Add authentication module"
# إرسال التغييرات إلى المستودع البعيد
git push origin feature/auth
أمر git status هو أحد أكثر الأوامر فائدة في العمل اليومي. يُظهر أي الملفات تم تعديلها، وأيها مُحضَّرة للالتزام، وأيها لا يتتبَّعها Git إطلاقاً.
لتحليل سجل المستودع يُستخدم أمر git log مع علامات تنسيق مختلفة. يُظهر التسلسل الزمني للالتزامات ومؤلفيها وتواريخها ومُعرِّفات SHA-1.
# عرض السجل مع تصور بياني للتفرعات
git log --oneline --graph --all
# عرض التغييرات في التزام محدد
git show a1b2c3d
# مقارنة الحالة الحالية مع آخر التزام
git diff HEAD
# عرض سجل ملف محدد
git log --follow src/MainActivity.kt
العلامة --graph تُظهر رسمًا ASCII للتفرعات، وهو مفيد بشكل خاص في المستودعات ذات العمل النشط على فروع متعددة. لمشاريع التطبيقات المحمولة ذات الإصدارات المتكررة، يُساعد الرسم البياني المرئي في تقييم هيكل التطوير بسرعة.
الأسئلة الشائعة
المستودع هو مخزن تقني للكود مع سجل التغييرات. المشروع مفهوم أوسع يتضمن المستودع ونظام إدارة المهام والتوثيق وعمليات التطوير. يمكن أن يحتوي مشروع واحد على عدة مستودعات.
أنشئ مستودعاً جديداً عبر واجهة GitHub الإلكترونية بالضغط على زر New. حدد اسماً ووصفاً ومستوى الوصول. ثم انسخ المستودع إلى جهازك المحلي أو اربطه بمستودع محلي موجود عبر git remote add origin.
إذا تم حذف المستودع البعيد من الخادم ولكن لدى مطور واحد على الأقل نسخة محلية، يمكن استعادة المستودع. يكفي إنشاء مستودع بعيد جديد وتنفيذ git push --force من النسخة المحلية بكل السجل.
Fork هو نسخة من مستودع شخص آخر على حسابك. تحصل على نسخة كاملة من السجل ويمكنك إجراء أي تغييرات دون التأثير على الأصل. تُستخدم forks للمشاركة في مشاريع مفتوحة المصدر عبر Pull Requests.
استخدم git gc لضغط الكائنات وإزالة البيانات غير القابلة للوصول. أزل الملفات الكبيرة من السجل عبر git filter-branch أو git filter-repo. للمشاريع ذات الملفات الثنائية، فكر في Git LFS (Large File Storage).
الخلاصة
سنقوم بتطوير تطبيق جوال جاهز
تقدم IT Sectr تطبيقات iOS وAndroid للشركات الناشئة والشركات منذ عام 2017. سوف نقدم لك النصح ونقترح أفضل حل.
اقرأ أيضًا