مبتدئ → تطبيقي · 10 دروس

Git و GitHub — من الحفظ المحلي إلى العمل الجماعي

تتعلّم حفظ نسخ مشروعك بذكاء، التعاون مع فريق، وفتح Pull Request — وتخرج بمستودع GitHub جاهز كمحفظة تعرض شغلك للعالم.

كيف تدرس هذا المسار؟

  1. اقرأ المفهوم — Git «آلة زمن» لمشروعك.
  2. انسخ أوامر Terminal وجرّبها في مجلد تجريبي.
  3. نفّذ المهمة وسجّل commit حقيقي إن أمكن.
  4. أكمل الاختبار — التقدّم يُحفظ على جهازك.

محتوى أصلي من Mesue Learn — عملي ومناسب لسن +12 وما فوق.

1. لماذا Git؟ — «آلة الزمن» لمشاريعك

الهدف: تفهم فكرة التحكم بالنسخ (Version Control) قبل كتابة أي أمر.

تخيّل أنك تكتب واجباً في Word وتنسخ الملف كل يوم: واجب_v1.docx، واجب_v2.docx... فوضى!

Git برنامج يحفظ «لقطات» (Snapshots) لمشروعك — كل لقطة اسمها commit — مع رسالة توضّح ماذا غيّرت.

لماذا يهمك؟
• ترجع لنسخة قديمة إن كسرت شيئاً
• تعمل على فرع (branch) تجربة من دون إفساد النسخة الرئيسية
• تتعاون مع أصدقاء دون استبدال ملفات بعضكم

Git = على جهازك. GitHub = موقع يستضيف نسخة مشروعك على الإنترنت ويسهّل التعاون.

  • Git يحفظ تاريخ المشروع — ليس مجرد نسخ احتياطي يدوي
  • Commit = لقطة + رسالة وصف
  • Branch = خط تطوير منفصل
  • GitHub = مشاركة ومراجعة — Git = المحرك

صورة ذهنية

 [ملفات مشروعك]
        |
        v
    [Git commits]
   v1 → v2 → v3
        |
        v
   [GitHub remote]

مختبر: قبل وبعد Git

اكتب 3 مشاكل حصلت لك (فقدان ملف، نسخة قديمة، تعارض مع صديق) — وكيف كان Git ليحلها.

مهمة عملية

اشرح لصديق في 4 جمل: ما الفرق بين Git و GitHub؟

اختبر فهمك

Git في المقام الأول هو...

2. تثبيت Git وإعداد هويتك

الهدف: تثبّت Git وتضبط اسمك وبريدك — كل commit يحمل توقيعك.

1) حمّل Git من git-scm.com (Windows/Mac/Linux)
2) افتح Terminal أو PowerShell
3) تحقق:
git --version

إعداد الهوية (مرة واحدة):
git config --global user.name "اسمك"
git config --global user.email "email@example.com"

استخدم بريد GitHub إن نويت الربط لاحقاً.

أوامر مفيدة:
git config --list
git config --global init.defaultBranch main

main = اسم الفرع الرئيسي الافتراضي (بدل master القديم).

  • git --version للتحقق من التثبيت
  • user.name و user.email إلزاميان للتعاون
  • --global = لكل مشاريعك على الجهاز
  • defaultBranch main عادةً

صورة ذهنية

 git config
    |
 +--+--+
 v     v
name  email
    |
    v
 [كل commit]

مختبر: تحقق من الإعداد

نفّذ git config --list | findstr user (Windows) أو grep user (Mac/Linux) — هل اسمك وبريدك ظاهران؟

مهمة عملية

ثبّت Git إن لم يكن مثبتاً، واضبط الاسم والبريد، والتقط لقطة شاشة لـ git --version.

اختبر فهمك

لماذا نضبط user.email في Git؟

3. أول مستودع — init و add و commit

الهدف: تنشئ مشروعاً محلياً وتحفظ أول commit.

mkdir mesue-demo && cd mesue-demo

# ملفات
echo '# مشروع تجريبي' > README.md
echo 'print("مرحباً")' > hello.py

# تهيئة Git
git init
git status # أحمر = غير متتبّع
git add README.md hello.py
git status # أخضر = staged
git commit -m "أول commit: README و hello.py"
git log --oneline # تاريخ مختصر

الدورة: عدّل ملف → git add → git commit -m "رسالة واضحة"

رسالة commit جيدة: «أضفت صفحة About» — سيئة: «تعديل».

  • git init مرة واحدة لكل مشروع
  • git add يجهّز الملفات للcommit
  • git commit -m يحفظ اللقطة
  • git status صديقك دائماً

صورة ذهنية

 working → staged → committed
 [تعديل]  [add]   [commit]
     \      |      /
      git status

مختبر: 3 commits

أضف ملف notes.txt بثلاث أسطر، commit. عدّل README، commit ثانٍ. راجع git log — يجب أن ترى 3 commits.

مهمة عملية

أنشئ مجلد mesue-git-lab بملفين وcommitين على الأقل — رسائل واضحة بالعربية أو الإنجليزية.

اختبر فهمك

بعد تعديل ملف متتبّع، ما الترتيب الصحيح؟

4. الفروع — branch للتجربة بأمان

الهدف: تنشئ فرعاً، تعمل عليه، وتدمجه في main.

git branch # قائمة الفروع
git branch feature-x # فرع جديد
git switch feature-x # انتقل (أو checkout)

# عدّل وأ commit على الفرع
git add .
git commit -m "تجربة على feature-x"

# العودة ودمج
git switch main
git merge feature-x

الفكرة: main مستقر، feature/* للتجارب.

حذف فرج بعد الدمج:
git branch -d feature-x

  • main = النسخة الرئيسية المستقرة
  • branch = نسخة متوازية للتطوير
  • merge يدمج التغييرات
  • رسائل commit واضحة تسهّل المراجعة

صورة ذهنية

 main:    A---B---C---M
              \     /
 feature:      D---E

مختبر: فرعين

فرع add-style يغيّر README، فرع fix-typo يصلح خطأ — ادمج كلاهما في main بالترتيب.

مهمة عملية

أنشئ فرع learn-day1، أضف ملف goals.txt، commit، ثم merge إلى main.

اختبر فهمك

لماذا نستخدم branches؟

5. GitHub — حساب ومستودع على السحابة

الهدف: تفتح حساباً وتنشئ repository فارغاً وتربطه محلياً.

1) سجّل على github.com (مجاني)
2) New repository → اسم: mesue-portfolio
3) Public (للمحفظة) أو Private
4) لا تضف README إن لديك مشروع محلي — أو العكس

ربط remote:
git remote add origin https://github.com/USER/mesue-portfolio.git
git remote -v

أو Clone من GitHub لمشروع موجود:
git clone https://github.com/USER/repo.git

SSH vs HTTPS: HTTPS أسهل للمبتدئ (username + token).

  • Repository = مجلد مشروع على GitHub
  • origin = الاسم الافتراضي للremote
  • Public = أي شخص يرى الكود
  • Private = أنت ومن تدعوهم فقط

صورة ذهنية

 [جهازك]                    [GitHub]
 mesue-portfolio  --push-->  origin/main
                <--pull--

مختبر: repo فارغ

أنشئ repo باسم mesue-learn-git-test — Public — بدون README. انسخ رابط HTTPS.

مهمة عملية

افتح حساب GitHub إن لم يكن لديك، وأنشئ مستودعاً تجريبياً.

اختبر فهمك

ماذا يعني origin في Git؟

6. push و pull — مزامنة جهازك مع GitHub

الهدف: ترفع commits وتسحب تحديثات الفريق.

أول رفع:
git push -u origin main

-u يحفظ الربط — بعدها:
git push

سحب تحديثات:
git pull origin main

# قبل push تأكد:
git status
git log origin/main..HEAD # commits لم تُرفع

خطأ شائع: push قبل pull عندما سبق زميلك — Git يطلب pull أولاً أو merge.

  • push يرسل commits إلى GitHub
  • pull يجلب ويدمج التحديثات
  • git fetch يجلب دون دمج — للمراقبة
  • pull قبل push عند العمل الجماعي

صورة ذهنية

 local main ----push----> GitHub
 local main <---pull----- GitHub

مختبر: رفع وتعديل على الويب

بعد push، عدّل README من GitHub (Edit) → pull محلياً → هل ظهر التعديل؟

مهمة عملية

ارفع مشروع mesue-git-lab إلى GitHub — تأكد أن README يظهر على الموقع.

اختبر فهمك

أول مرة ترفع main إلى origin، أي أمر شائع؟

7. Pull Request — مراجعة قبل الدمج

الهدف: تفهم سير PR في الفريق: فرع → مراجعة → merge.

في الفريق الحقيقي:
1) git switch -c feature/login
2) commits على الفرع
3) git push -u origin feature/login
4) على GitHub: Compare & pull request
5) زميل يراجع (Review) — تعليقات أو موافقة
6) Merge pull request
7) git switch main && git pull

PR = «اقترح دمج هذه التغييرات» — ليس مجرد push لـ main مباشرة.

Mesue نصيحة: PR صغير = مراجعة أسرع. عنوان واضح + وصف «ماذا ولماذا».

  • PR يربط branch بـ main عبر مراجعة
  • Review يكتشف الأخطاء قبل الدمج
  • Squash merge = commit واحد نظيف
  • احترم تعليقات المراجع

صورة ذهنية

 feature --push--> GitHub
                    |
                    v
                 [Open PR]
                    |
                    v
              Review → Merge → main

مختبر: PR تجريبي

على repo تجريبي: فرع docs-update → عدّل README → push → افتح PR → Merge بنفسك.

مهمة عملية

افتح PR واحداً (حتى على repo شخصي) بوصف عربي من 3 أسطر.

اختبر فهمك

Pull Request يُستخدم أساساً لـ...

8. .gitignore والأسرار — لا ترفع كلمات السر

الهدف: تستثني ملفات حساسة وتفهم لماذا الأسرار لا تدخل Git أبداً.

ملف .gitignore يخبر Git: «تجاهل هذه الملفات».

مثال:
.env
*.log
node_modules/
__pycache__/
.DS_Store
credentials/

إن رفعت كلمة سر بالخطأ:
• غيّرها فوراً (اعتبرها مسرّبة)
• git rm --cached .env
• commit + push

Git يحفظ التاريخ — حذف الملف لا يمحو commit القديم من السحابة دون أدوات متقدمة.

قاعدة Mesue: credentials/ و .env خارج Git دائماً.

  • .gitignore قبل أول commit أفضل
  • لا passwords ولا API keys في Git
  • git rm --cached لإزالة ملف متتبّع
  • إن تسرّب سر — غيّره فوراً

صورة ذهنية

 [ملفات]
    |
 .gitignore → [Git يتتبع]
    |
 .env → ✗ ممنوع

مختبر: ignore

أنشئ secret.txt و.env — أضف .env لـ gitignore — git status يجب ألا يعرض .env.

مهمة عملية

أضف .gitignore مناسباً لمشروعك التجريبي — تأكد أن git status نظيف.

اختبر فهمك

أين تضع كلمة سر API؟

9. التعاون — Issues و Fork و تعارض بسيط

الهدف: تستخدم Issues للمهام وتفهم Fork و merge conflicts مبدئياً.

Issues على GitHub:
• «Bug: الزر لا يعمل على الموبايل»
• «Feature: صفحة About»
• Labels: bug, enhancement, good first issue

Fork = نسخة مستودع شخص ينسخها ليعدّل — ثم PR للم original.

تعارض merge (Conflict):
Git لا يدمج تلقائياً إن عدّل شخصان نفس السطر.
git pull → conflict markers:
<<<<<<< HEAD
=======
>>>>>>> branch

عدّل الملف يدوياً، احذف العلامات، add، commit.

  • Issues = قائمة مهام/أخطاء
  • Fork للمساهمة في مشاريع الغير
  • Conflicts طبيعية — حلها يدوياً
  • تواصل مع الفريق قبل merge كبير

صورة ذهنية

 Issue → branch → PR → merge
 Fork → clone → PR upstream

مختبر: Issue

افتح Issue على repo تجريبي: «تحسين README» — اربطه بcommit لاحقاً في PR.

مهمة عملية

أنشئ Issue واحداً + label إن أمكن — أو اشرح الفرق بين Fork و Clone.

اختبر فهمك

علامات <<<<<<< في ملف تعني...

10. المشروع النهائي — محفظة GitHub

الهدف: تسلّم مستودع portfolio بـ README عربي يعرض مشاريع Mesue Learn.

المطلوب: repo Public اسمه mesue-portfolio (أو مشابه)

محتويات:
• README.md عربي: من أنت، مهارات، 3–5 مشاريع (روابط)
• مجلد projects/ أو links لمسارات Learn
• .gitignore سليم
• 5+ commits بتاريخ منطقي
• (اختياري) GitHub Pages لصفحة بسيطة

معيار النجاح:
✓ الرابط يفتح لأي زائر
✓ README واضح خلال 30 ثانية
✓ لا أسرار في الملفات
✓ commit أخير: «Portfolio ready for review»

  • README = واجهة محفظتك
  • commits منتظمة تظهر انضباطاً
  • Public للعرض — Private للمشاريع السرية
  • اربط مسارات Learn التي أنجزتها

صورة ذهنية

 README → مشاريع → روابط
     |
     v
 [GitHub Profile]
     |
     v
 فرص / تعلّم / عمل

مختبر: العرض النهائي

شارك رابط repo مع صديق — هل فهم مشاريعك من README دون شرح إضافي؟

مهمة عملية

انشر mesue-portfolio على GitHub + README عربي + رابط في تعليق Mesue Learn إن رغبت.

اختبر فهمك

أفضل عنصر في محفظة GitHub للمبتدئ؟

محفظتك على GitHub جاهزة للانطلاق

اربط مسارات Learn في README، ثم جرّب مسار Flutter أو السحابة لنشر مشروعك.