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

5 دقيقة

جدول المحتويات


1 — المناطق الثلاث في Git

لفهم الإيداعات، يجب أولاً تصوّر المناطق الثلاث التي يمرّر عبرها Git ملفاتك.

المنطقةالوصفالأمر للدخول إليها
مجلد العململفاتك كما تحرّرها(تحرير مباشر)
منطقة التجهيز (الفهرس)التغييرات التي تجهّزها للتسجيلgit add
المستودع المحليالسجل الدائم للإيداعاتgit commit

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

↑ العودة إلى الأعلى


2 — تهيئة مستودع محلي

لتحويل مجلد عادي إلى مستودع Git:

bash
# الانتقال إلى مجلد المشروع
cd mon-projet

# تهيئة المستودع
git init

هذا ينشئ مجلداً فرعياً مخفياً .git/ يحتوي السجل كله وإعداد المستودع.

bash
# التحقق من حالة المستودع المُنشأ للتو
git status

تحذير: لا تحذف مجلد .git/ أبداً: إنه يحتوي السجل كله. حذفه يعني فقدان الأرشفة (دون فقدان ملفاتك الحالية).

تمرين مصغّر — اكتب الأمر الذي يحوّل المجلد الحالي إلى مستودع Git، ثم الأمر الذي يعرض حالته.

عرض الحل
bash
git init
git status

↑ العودة إلى الأعلى


3 — تتبع الملفات

يمكن أن يكون الملف متتبَّعاً (tracked) أو غير متتبَّع (untracked) من Git.

bash
# تجهيز ملف محدَّد
git add fichier.txt

# تجهيز كل تغييرات المجلد
git add .

# رؤية الحالة (متتبَّع / غير متتبَّع / مجهَّز)
git status
الأمرالأثر
git add fichier.txtيجهّز ملفاً محدَّداً
git add .يجهّز كل الملفات المعدَّلة/الجديدة
git restore --staged fichier.txtيخرج ملفاً من منطقة التجهيز
git statusيعرض حالة كل ملف

git status أفضل صديق لك: استخدمه قبل وبعد كل git add لترى بالضبط ما يستعد Git لتسجيله.

تمرين مصغّر — عدّلت للتو index.html و style.css. اكتب الأمر الذي يجهّز (stage) index.html فقط.

عرض الحل
bash
git add index.html

↑ العودة إلى الأعلى


4 — إنشاء إيداع

الإيداع (commit) لقطة (snapshot) لمشروعك في لحظة معيّنة، مرفوقة برسالة تفسّر التغيير.

bash
# التجهيز ثم التسجيل
git add .
git commit -m "إضافة صفحة الاستقبال"

كل إيداع يملك:

العنصرالوصف
معرّف (hash)مثال a1b2c3d… — فريد
مؤلفاسمك + بريدك (إعداد الدرس 05)
تاريخختم زمني للإيداع
رسالةوصف التغيير
أبالإيداع السابق (سلسلة السجل)
bash
# رؤية سجل الإيداعات
git log
git log --oneline   # نسخة مختصرة

الإيداع الجيد ذرّي: يفعل شيئاً واحداً متماسكاً. تجنّب الإيداع الجامع «أشياء كثيرة» — فضّل عدة إيداعات صغيرة واضحة.

تمرين مصغّر — جهّز كل تغييراتك وأنشئ إيداعاً رسالته «يضيف صفحة الاتصال».

عرض الحل
bash
git add .
git commit -m "يضيف صفحة الاتصال"

↑ العودة إلى الأعلى


5 — ممارسات جيدة للرسائل

رسالة الإيداع تروي قصة المشروع. رسالة جيدة توفّر ساعات على الفريق كله (وعليك بعد 6 أشهر).

القواعد الأساسية

  • الكتابة بصيغة الأمر في المضارع: «أضف…»، «صحّح…»، «احذف…».
  • سطر ملخص قصير (≤ 50 حرفاً)، ثم متن مفصَّل إن لزم.
  • اشرح لماذا، لا ماذا فقط.

مقارنة

رسالة سيئةرسالة جيدة
updateيحدّث تبعية Maven إلى 3.9
fix bugيصحّح الانهيار عند البدء إن غاب الإعداد
wipيضيف التحقق من نموذج الدخول

عرف شائع (Conventional Commits)

feat: يضيف المصادقة بالرمز
fix: يصحّح ترقيم صفحات النتائج
docs: يكمّل README التثبيت

تلميح للتذكّر: الرسالة الجيدة تُكمل الجملة «إذا طبّقت هذا الإيداع، فسوف…». مثال: «…إضافة صفحة الاستقبال».

↑ العودة إلى الأعلى


6 — ملف .gitignore

بعض الملفات يجب ألا تُؤرشف أبداً: ملفات مؤقتة، تبعيات ضخمة، أسرار، ملفات مجمَّعة. ملف .gitignore يخبر Git بتجاهلها.

bash
# مثال محتوى ملف .gitignore
target/
node_modules/
*.log
.env
.DS_Store
ما يُتجاهللماذا
node_modules/، target/تُعاد بناؤها تلقائياً، ضخمة
.env، *.keyأسرار — أبداً في Git!
*.log، *.tmpملفات مؤقتة بلا قيمة

قاعدة ذهبية للأمن: لا تودع أبداً كلمات مرور أو مفاتيح API أو أسراراً. ما إن يدخل السر سجل Git، يبقى فيه — حتى لو حُذف لاحقاً. ضع .env في .gitignore منذ البداية.

تمرين مصغّر — اكتب السطر الذي يُضاف إلى .gitignore لمنع Git من أرشفة ملف الأسرار .env.

عرض الحل
.env

↑ العودة إلى الأعلى


7 — اختبار — المستودع المحلي والإيداعات

السؤال 1: أي أمر يحوّل مجلداً عادياً إلى مستودع Git؟

a) git start

b) git init

c) git new

d) git create

عرض الحل

الإجابة: b)git init ينشئ المجلد الفرعي .git/ الذي يحتوي السجل ويجعل المجلد مستودعاً.


السؤال 2: ما الترتيب الصحيح للمناطق الثلاث في Git؟

a) المستودع → التجهيز → مجلد العمل

b) مجلد العمل → التجهيز → المستودع المحلي

c) التجهيز → المستودع → مجلد العمل

d) مجلد العمل → المستودع → التجهيز

عرض الحل

الإجابة: b) — نحرّر (مجلد العمل)، نجهّز بـ git add (التجهيز)، ثم نسجّل بـ git commit (المستودع المحلي).


السؤال 3: لماذا يُستخدم git add؟

a) لإنشاء إيداع

b) لتجهيز تغييرات في منطقة التجهيز

c) لحذف ملف

d) لإرسال الشفرة إلى GitHub

عرض الحل

الإجابة: b)git add ينقل التغييرات من مجلد العمل إلى منطقة التجهيز، قبل الإيداع.


السؤال 4: أيها رسالة إيداع جيدة؟

a) truc

b) wip

c) يصحّح الانهيار عند البدء إن غاب الإعداد

d) .

عرض الحل

الإجابة: c) — واضحة، بصيغة الأمر، وتفسّر التغيير. الباقي غامض وعديم النفع في السجل.


السؤال 5: لماذا نستخدم .gitignore؟

a) لتسريع الحاسوب

b) لمنع Git من أرشفة ملفات معيّنة (مؤقتة، أسرار، تبعيات)

c) لحذف السجل

d) لتجاهل الإيداعات

عرض الحل

الإجابة: b).gitignore يسرد الملفات التي يجب أن يتجاهلها Git، لا سيما الأسرار (.env) والمجلدات القابلة لإعادة البناء (node_modules/).

↑ العودة إلى الأعلى


8 — تطبيق عملي — أول مستودع لك

المطلوب

أنشئ مستودعاً محلياً، أضف ملفاً، تجاهل ملف سر، وقم بإيداعين نظيفين.


التصحيح — سلسلة الأوامر المتوقعة

bash
# 1. إنشاء المجلد والدخول إليه
mkdir mon-premier-depot
cd mon-premier-depot

# 2. تهيئة المستودع
git init

# 3. إنشاء ملف محتوى و .gitignore
echo "# مشروعي" > README.md
echo ".env" > .gitignore
echo "SECRET=123" > .env        # يجب تجاهل هذا الملف

# 4. التحقق من الحالة (.env يجب ألا يظهر)
git status

# 5. الإيداع الأول
git add README.md .gitignore
git commit -m "يهيئ المشروع مع README و gitignore"

# 6. تعديل ثم إيداع ثانٍ
echo "وصف المشروع" >> README.md
git add README.md
git commit -m "يكمّل الوصف في README"

# 7. استشارة السجل
git log --oneline

النتيجة المتوقعة:

b2c3d4e يكمّل الوصف في README
a1b2c3d يهيئ المشروع مع README و gitignore

تحقق من أن .env لا يظهر أبداً في git status: هذا دليل أن .gitignore يعمل وأن سرك محمي.

↑ العودة إلى الأعلى


9 — الخلاصة

النقاط التي يجب تذكّرها

  1. ثلاث مناطق: مجلد العمل → التجهيز (git add) → المستودع المحلي (git commit).
  2. git init ينشئ المستودع (مجلد .git/).
  3. الإيداع لقطة + رسالة، مرتبط بإيداع الأب.
  4. رسائل جيدة: أمر، واضحة، ذرّية، تفسّر لماذا.
  5. .gitignore يحمي الأسرار ويستبعد الملفات غير المفيدة.

ما يلي

الدرس 07 — الفروع والسجل: العمل على عدة إصدارات بالتوازي دون كسر الإصدار الرئيسي.

↑ العودة إلى الأعلى


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

دورة من إعداد الدكتور هيثم رحومة — تطوير ونشر حلول البيانات