المستودع في Git: ما هو، وما أنواعه وكيف يعمل

المؤلف: IT Sectr نُشر: 2026-05-09 وقت القراءة: 8 دق

مستودع Git — هو مخزن للكود المصدري للمشروع حيث يتتبع Git كل تغيير في الملفات طوال فترة التطوير. يحتوي المستودع على السجل الكامل للالتزامات والفروع والعلامات، مما يسمح للمطورين بالعمل معاً على الكود. وفقاً لـ Git, 2024، يُعتبر المستودع أساس أي نظام للتحكم في الإصدارات ويُستخدم في ملايين المشاريع حول العالم.

أهم النقاط

  • مستودع Git — هو دليل المشروع مع مجلد الخدمة .git حيث يُخزَّن كل سجل التغييرات.
  • المستودع المحلي — موجود على جهاز المطور ويسمح بالعمل مع الكود دون اتصال بالإنترنت.
  • المستودع البعيد — يُستضاف على خادم GitHub أو GitLab أو Bitbucket ويُستخدم للمزامنة بين المشاركين.
  • Git — يُخزِّن البيانات كلقطات للملفات وليس كقائمة تغييرات، مما يُسرِّع عمليات التفرع والدمج.
  • نظام التحكم في الإصدارات — يحل مشكلة العمل المتزامن على نفس المشروع، ويمنع التعارضات عند دمج الكود.

ما هو المستودع في Git

مستودع Git — هو هيكل بيانات يُخزِّن فيه نظام التحكم في الإصدارات البيانات الوصفية والكائنات التي تصف تاريخ تغييرات ملفات المشروع. عندما يُهيِّئ المطور مستودعاً بأمر git init، ينشئ Git مجلداً مخفياً .git في جذر المشروع.

داخل هذا المجلد توجد جميع الكائنات والمراجع وملفات التهيئة اللازمة لعمل النظام. المستودع غير مرتبط بموقع محدد — يمكن للمطور إنشائه محلياً ثم ربطه بخادم بعيد.

يستخدم Git نموذج المستودع الموزَّع: كل مشارك في المشروع لديه نسخة كاملة من السجل على جهازه. هذا يعني أن معظم العمليات — الالتزام، عرض السجل، إنشاء الفروع — تُنفَّذ محلياً دون الاتصال بالخادم.

وفقاً لتوثيق Git، البنية الموزَّعة تجعل النظام مقاوماً للأعطال: إذا تعطل الخادم، يمكن لأي مستودع محلي أن يكون مصدراً لاستعادة السجل الكامل للمشروع.

المستودع المحلي والبعيد

المستودع المحلي — هو نسخة من المشروع على جهاز المطور. يحتوي على كل سجل الالتزامات والفروع والعلامات، ويسمح بتنفيذ عمليات الالتزام والتفرع والدمج وإعادة الأساس دون اتصال بالشبكة.

المستودع البعيد — يُستضاف على خادم ويعمل كنقطة مزامنة لجميع أعضاء الفريق. يُرسل المطورون تغييراتهم بأمر git push ويستلمون تغييرات الآخرين بأمر git pull.

يتم تكوين الاتصال بين المستودع المحلي والبعيد عبر remote origin — رابط الخادم المُخزَّن في إعدادات Git. يمكن ربط مستودع محلي واحد بعدة مستودعات بعيدة، وهو أمر مفيد عند العمل مع النسخ المتفرعة.

الميزة الرئيسية لهذا النموذج هي أن المطور يمكنه العمل على الكود في وضع عدم الاتصال ومزامنة التغييرات فقط عندما يكون مستعداً لإرسال النتيجة.

الاختلافات بين المستودع المحلي والبعيد

الخاصيةمحليبعيد
الموقععلى جهاز المطورعلى خادم (GitHub, GitLab)
الوصول دون اتصالوصول كامل لجميع العملياتغير متاح دون اتصال
المزامنةدفع/سحب مع البعيديستقبل الدفع من المحلي
النسخ الاحتياطيغير محمي من فقدان البياناتمُخزَّن على خادم بنسخ احتياطية

كيف يُخزِّن Git البيانات في المستودع

نموذج تخزين Git يختلف جوهرياً عن أنظمة التحكم في الإصدارات الأخرى. بدلاً من تخزين قائمة بالتغييرات (الفروقات) بين الإصدارات، يُخزِّن Git لقطات كاملة لجميع ملفات المشروع في لحظة كل التزام.

يتم تعريف كل كائن في المستودع بواسطة تجزئة SHA-1 فريدة مكونة من 40 حرفاً. إذا لم يتغير محتوى الملف بين الالتزامات، لا ينشئ Git كائناً جديداً بل يعيد استخدام الموجود — وهذا يُوفِّر المساحة.

يستخدم Git أربعة أنواع من الكائنات: blob (محتوى الملف)، tree (هيكل الدليل)، commit (لقطة مع بيانات وصفية) وtag (مرجع مسمى إلى التزام). جميع الكائنات مُخزَّنة في مجلد .git/objects.

وفقاً لـ Git Internals، يضمن نموذج كائنات Git سلامة البيانات: أي تغيير في محتوى الملف يُنتج تجزئة جديدة، مما يجعل من المستحيل تغيير السجل دون اكتشاف.

هيكل مجلد .git

مجلد .git هو قلب المستودع. بدونه، لا يمكن لـ Git تتبع التغييرات، ويبقى الدليل العادي مجرد مجموعة من الملفات. فهم هيكل هذا المجلد يساعد في تشخيص مشاكل المستودع.

  • objects/ — جميع كائنات المستودع: blobs، trees، commits، tags. مُخزَّنة بشكل مضغوط.
  • refs/ — مراجع إلى الالتزامات: heads (الفروع)، tags (العلامات)، remotes (الفروع البعيدة).
  • HEAD — ملف يُشير إلى الفرع النشط الحالي أو الالتزام.
  • config — إعدادات المستودع: رابط الخادم البعيد، اسم المستخدم، البريد الإلكتروني ومعلمات أخرى.
  • index — منطقة الإعداد حيث يُخزِّن Git معلومات عن الملفات المُحضَّرة للالتزام.
  • logs/ — سجلات تحديث المراجع (reflog) التي تُخزِّن تاريخ تحركات HEAD والفروع.

ملف HEAD يستحق اهتماماً خاصاً. في الحالة الطبيعية يحتوي على مرجع رمزي إلى فرع، مثلاً ref: refs/heads/main. في حالة detached HEAD يُشير مباشرة إلى التزام — وهذا يعني أن الالتزامات الجديدة لن ترتبط بأي فرع.

العمليات الأساسية مع المستودع

العمل مع مستودع Git يتضمن مجموعة من العمليات الأساسية التي يُنفذها المطور يومياً. كل عملية تُغيِّر حالة المستودع بإضافة كائنات جديدة أو نقل المراجع.

  • git init — ينشئ مستودعاً فارغاً جديداً في الدليل الحالي. ينشئ Git مجلد .git بهيكل ابتدائي.
  • git clone — ينسخ مستودعاً بعيداً موجوداً إلى الجهاز المحلي مع كل سجل الالتزامات.
  • git add — يُضيف تغييرات الملفات إلى منطقة الإعداد (الفهرس)، لتحضيرها للالتزام.
  • git commit — ينشئ لقطة للمشروع بناءً على البيانات من الفهرس ويحفظها ككائن التزام جديد.
  • git push — يُرسل التزامات جديدة من المستودع المحلي إلى البعيد، محدثاً الفروع على الخادم.
  • git pull — يستلم التزامات جديدة من المستودع البعيد ويدمجها مع الفرع المحلي الحالي.

عمليتا push وpull هما الوحيدتان اللتان تتطلبان اتصالاً بالخادم البعيد. جميع العمليات الأخرى تُنفَّذ محلياً بالكامل، مما يضمن سرعة عالية حتى مع حجم كبير من السجل.

دورة حياة الملف في المستودع

يمر كل ملف في المستودع بأربع حالات: untracked (غير متتبَّع)، modified (مُعدَّل)، staged (مُحضَّر) وcommitted (مُلتزَم). يتتبَّع Git فقط الملفات التي تمت إضافتها صراحةً عبر git add أو الموجودة بالفعل في سجل الالتزامات.

فهم هذا النموذج هو مفتاح العمل الفعَّال مع Git. يمكن للمطور تحضير جزء فقط من الملفات المُعدَّلة للالتزام بشكل انتقائي، لإنشاء التزامات مكتملة منطقياً مع وصف واضح.

عادةً ما تُستضاف المستودعات البعيدة على منصات متخصصة تُوفِّر واجهة ويب ونظام إدارة وصول وأدوات إضافية للتطوير التعاوني.

  • GitHub — أكبر منصة بأكثر من 100 مليون مستودع. تُوفِّر Actions وPull Requests وIssues وWiki. مجانية للمشاريع العامة.
  • GitLab — منصة مع CI/CD مدمج وContainer Registry وخط أنابيب DevOps مضمَّن. متوفرة كـ SaaS ونسخة مستضافة ذاتياً.
  • Bitbucket — حل من Atlassian مع تكامل Jira وTrello. شائع في البيئات المؤسسية بفضل إعدادات الوصول المرنة.

اختيار المنصة يعتمد على حجم الفريق ومتطلبات الخصوصية والتكاملات الضرورية. لتطوير التطبيقات المحمولة، غالباً ما يُختار GitHub بسبب الدعم المجتمعي الواسع والتكامل مع أدوات CI/CD لنظامي iOS وAndroid.

أمثلة أوامر للعمل مع المستودع

لنفكر في سيناريو عملي: مطور ينسخ مستودعاً موجوداً، ينشئ فرعاً جديداً، يُجري تغييرات ويُرسلها إلى الخادم. كل أمر يُوضِّح العمل مع مكونات مختلفة من المستودع.

bash
# استنساخ مستودع بعيد
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.

bash
# عرض السجل مع تصور بياني للتفرعات
git log --oneline --graph --all

# عرض التغييرات في التزام محدد
git show a1b2c3d

# مقارنة الحالة الحالية مع آخر التزام
git diff HEAD

# عرض سجل ملف محدد
git log --follow src/MainActivity.kt

العلامة --graph تُظهر رسمًا ASCII للتفرعات، وهو مفيد بشكل خاص في المستودعات ذات العمل النشط على فروع متعددة. لمشاريع التطبيقات المحمولة ذات الإصدارات المتكررة، يُساعد الرسم البياني المرئي في تقييم هيكل التطوير بسرعة.

الأسئلة الشائعة

ما الفرق بين المستودع والمشروع؟

المستودع هو مخزن تقني للكود مع سجل التغييرات. المشروع مفهوم أوسع يتضمن المستودع ونظام إدارة المهام والتوثيق وعمليات التطوير. يمكن أن يحتوي مشروع واحد على عدة مستودعات.

كيفية إنشاء مستودع على GitHub؟

أنشئ مستودعاً جديداً عبر واجهة GitHub الإلكترونية بالضغط على زر New. حدد اسماً ووصفاً ومستوى الوصول. ثم انسخ المستودع إلى جهازك المحلي أو اربطه بمستودع محلي موجود عبر git remote add origin.

هل يمكن استعادة مستودع مُحذَف؟

إذا تم حذف المستودع البعيد من الخادم ولكن لدى مطور واحد على الأقل نسخة محلية، يمكن استعادة المستودع. يكفي إنشاء مستودع بعيد جديد وتنفيذ git push --force من النسخة المحلية بكل السجل.

ما هو fork المستودع؟

Fork هو نسخة من مستودع شخص آخر على حسابك. تحصل على نسخة كاملة من السجل ويمكنك إجراء أي تغييرات دون التأثير على الأصل. تُستخدم forks للمشاركة في مشاريع مفتوحة المصدر عبر Pull Requests.

كيفية تقليل حجم المستودع؟

استخدم git gc لضغط الكائنات وإزالة البيانات غير القابلة للوصول. أزل الملفات الكبيرة من السجل عبر git filter-branch أو git filter-repo. للمشاريع ذات الملفات الثنائية، فكر في Git LFS (Large File Storage).

الخلاصة

  • مستودع Git — هو مخزن كود بسجل كامل للتغييرات، حيث كل التزام هو لقطة لجميع ملفات المشروع في لحظة زمنية محددة.
  • المستودع المحلي — موجود على جهاز المطور ويدعم المجموعة الكاملة لعمليات Git دون اتصال بالشبكة.
  • المستودع البعيد — يزامن عمل الفريق عبر الدفع والسحب، مما يُوفِّر مصدر حقيقة واحداً لجميع المشاركين.
  • مجلد .git — يحتوي على جميع المعلومات الخدمية: الكائنات ومراجع الفروع والإعدادات وسجل عمليات reflog.
  • GitHub وGitLab وBitbucket — هي المنصات الرئيسية لاستضافة المستودعات البعيدة مع أدوات CI/CD إضافية.
  • نموذج كائنات Git — يستخدم تجزئات SHA-1 لتعريف كل كائن، مما يضمن سلامة بيانات المستودع.
  • توصية: قم بالالتزام مرة واحدة على الأقل يومياً وتزامن مع المستودع البعيد بعد إكمال كل مرحلة عمل.

سنقوم بتطوير تطبيق جوال جاهز

تقدم IT Sectr تطبيقات iOS وAndroid للشركات الناشئة والشركات منذ عام 2017. سوف نقدم لك النصح ونقترح أفضل حل.

مناقشة المشروع

اقرأ أيضًا