مقارنة

Git وGitHub: ما الفرق وكيف يرتبطان

آخر تحديث: · Skillaria.Top

Git برنامج للتحكم في الإصدارات يعمل على حاسوبك ويحفظ تاريخ تغييرات المشروع. أما GitHub فخدمة سحابية تستضيف مستودعات Git، وتضيف أدوات العمل الجماعي: pull request ومراجعة الكود والمهام وCI. يمكن استخدام Git بدون GitHub، ولا يمكن استخدام GitHub بدون Git.

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

ما هو Git

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

كلمة «موزَّع» هنا هي المفتاح. لدى كل مشارك في المشروع نسخة كاملة من المستودع مع كل تاريخه، وليس آخر الملفات فقط. إذا توقف الخادم يمكن استعادة المشروع من أي جهاز عمل.

ما الذي يفعله Git بمفرده:

  • تثبيت التغييرات في commits — لقطات للمشروع مع المؤلف والتاريخ والوصف؛
  • عرض من غيّر سطراً معيناً ومتى ولماذا (git log، git blame)؛
  • إدارة خطوط تطوير متوازية في فروع ودمجها؛
  • التراجع عن الأخطاء دون فقدان بقية العمل؛
  • تبادل التاريخ مع مستودعات أخرى عبر git push وgit pull وgit fetch.

Git أداة سطر أوامر. أما الواجهات الرسومية ولوحات Git المدمجة في المحررات (VS Code وIntelliJ IDEA) فهي مجرد أغلفة فوق الأوامر نفسها.

ما هو GitHub

GitHub منصة سحابية لاستضافة مستودعات Git، وهي مملوكة اليوم لشركة Microsoft. تنشئ فيها مستودعاً، وترسل إليه الكود المحلي بالأمر git push، فيصبح متاحاً للزملاء وأصحاب العمل، ولكل الإنترنت إذا كان المستودع عاماً.

لكن قيمة GitHub لا تقتصر على التخزين. فحول المستودع يضيف GitHub ما ليس موجوداً في Git نفسه:

  • Pull request — طلب دمج فرع مع نقاش ومراجعة للكود سطراً بسطر؛
  • Issues — مهام وتقارير أخطاء مرتبطة بالمشروع؛
  • GitHub Actions — التكامل والنشر المستمران: تشغيل الاختبارات والبناء والنشر تلقائياً مع كل push؛
  • إدارة الصلاحيات — من يستطيع القراءة والكتابة والدمج في الفروع المحمية؛
  • ملف شخصي للمطور — رسم النشاط والمشاريع العامة التي يطّلع عليها المسوّقون؛
  • GitHub Pages — استضافة مجانية للمواقع الثابتة مباشرة من المستودع.

عبارات مثل «git com» أو «git hub» تعني غالباً هذه الخدمة، وعنوانها github.com. أما الموقع الرسمي لـ Git نفسه فهو git-scm.com، ومنه يُنزَّل برنامج التثبيت.

Git وGitHub: مقارنة في جدول

المعيارGitGitHub
ما هوبرنامج للتحكم في الإصداراتخدمة ويب لاستضافة المستودعات
أين يعملعلى حاسوبكفي السحابة، عبر المتصفح وواجهة API
هل يحتاج إلى إنترنتلا، إلا عند التبادل مع المستودعات البعيدةنعم
الترخيصمفتوح المصدر (GPLv2)، مجانيخدمة مملوكة، فيها خطة مجانية وخطط مدفوعة
الواجهةسطر الأوامر، وعملاء رسوميونالموقع، وتطبيق GitHub Desktop، وأداة سطر الأوامر gh
المهمة الأساسيةتاريخ الإصدارات والفروع والدمجالعمل الجماعي والمراجعة وCI ونشر الكود
هل يمكن الاستغناء عن أحدهمانعم، تماماًلا، فـ GitHub مبني على Git

كيف يعمل Git وGitHub معاً

الرابط بينهما هو remote، أي المستودع البعيد. يحتفظ المستودع المحلي بعنوان المستودع على GitHub باسم قصير، وهو افتراضياً origin. بعد ذلك يجري التبادل بثلاثة أوامر:

  • git push — إرسال commits الجديدة إلى الخادم؛
  • git fetch — سحب commits الآخرين دون المساس بملفاتك؛
  • git pull — السحب ودمج التغييرات فوراً في الفرع الحالي (أي fetch + merge أو rebase).

مهم: لا يرى GitHub كودك قبل أن ترسله. الـ commit يبقى محلياً حتى أول git push. ومن هنا الخطأ الشائع عند المبتدئين: «عملت commit ولا شيء على GitHub».

المسار المعتاد: من مشروع محلي إلى GitHub

# 1. ننشئ المستودع محلياً
cd my-project
git init
git add .
git commit -m "أول commit"

# 2. ننشئ مستودعاً فارغاً على github.com (دون README)
#    ننسخ عنوانه ونربطه كـ remote
git remote add origin git@github.com:username/my-project.git

# 3. نعيد تسمية الفرع إلى main ونرسله
git branch -M main
git push -u origin main

العلامة -u (الصيغة الكاملة --set-upstream) تربط الفرع المحلي main بالفرع البعيد. بعدها يكفي كتابة git push وgit pull دون وسائط.

الاتجاه المعاكس: البدء من مستودع على GitHub

إذا كان المشروع موجوداً على GitHub فلا تنشئه من جديد، بل استنسخه:

git clone https://github.com/username/my-project.git
cd my-project

سينزّل الأمر التاريخ كاملاً، ويضبط remote باسم origin تلقائياً.

المصادقة: SSH أو HTTPS

منذ عام 2021 لا يقبل GitHub كلمة مرور الحساب عند العمل مع Git عبر HTTPS. وتوجد طريقتان صالحتان.

HTTPS + Personal Access Token. يُنشأ الرمز في إعدادات الحساب (Settings ← Developer settings) ويُدخل بدلاً من كلمة المرور. ولكي لا تكتبه في كل مرة يستخدم Git مدير بيانات الاعتماد، وعلى Windows يأتي مع Git for Windows.

مفاتيح SSH. الخيار الذي يتوقع أصحاب العمل أنك تعرف إعداده بنفسك:

# ننشئ المفتاح
ssh-keygen -t ed25519 -C "you@example.com"

# نطبع الجزء العام ونضيفه إلى GitHub:
# Settings ← SSH and GPG keys ← New SSH key
cat ~/.ssh/id_ed25519.pub

# نتحقق من الاتصال
ssh -T git@github.com

عند النجاح يرد GitHub بترحيب يتضمن اسم المستخدم، مع توضيح أنه لا يُمنح وصول shell — وهذا طبيعي. ويجب أن يكون عنوان المستودع بالصيغة git@github.com:user/repo.git لا https://.

إذا كان المستودع مربوطاً عبر HTTPS فيمكن تحويله إلى SSH بأمر واحد:

git remote set-url origin git@github.com:username/my-project.git

GitHub وGitLab وغيرهما: ما الفرق

GitHub ليس الاستضافة الوحيدة لـ Git. كلها تعمل مع Git نفسه، لذلك يمكن نقل المستودع من واحدة إلى أخرى دون فقدان التاريخ. والفرق بينها هو مجموعة الأدوات المحيطة بالكود.

الخدمةالمميزاتمتى تُختار
GitHubأكبر مجتمع مفتوح المصدر، وGitHub Actions، وCopilotالملف الشخصي، والمشاريع المفتوحة، ومعظم الشركات الناشئة
GitLab (جيت لاب)CI/CD مدمج من البداية، ويمكن تشغيله على خادمك (self-hosted)الشركات التي تريد الكود داخل بنيتها التحتية
Bitbucketتكامل مع Jira ومنتجات Atlassianالفرق التي تعيش في منظومة Atlassian
Gitea وForgejoحلول خفيفة مفتوحة المصدر تُشغَّل على خادمكالفرق الصغيرة والخوادم المنزلية

في GitLab يُسمى طلب الدمج merge request، وفي GitHub pull request، لكن الجوهر واحد: اقتراح تغييرات من فرع ومناقشتها قبل الدمج. المصطلحات تختلف، أما أوامر Git فنفسها.

يمكن أن تحتفظ بعدة remotes في مستودع محلي واحد، مثلاً لنسخ المشروع إلى GitHub وGitLab معاً:

git remote add gitlab git@gitlab.com:username/my-project.git
git push gitlab main
git remote -v

هل أحتاج إلى GitHub إذا كنت أعمل وحدي؟

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

  • نسخة احتياطية. إذا تعطل الحاسوب المحمول يبقى الكود وكل التاريخ على الخادم.
  • العمل من أكثر من جهاز. في المنزل والمكتب تتزامن عبر push وpull.
  • ملف الأعمال. عند التقديم لوظيفة مبتدئ يُنظر غالباً إلى ملف GitHub قبل السيرة الذاتية: هل توجد مشاريع حية، وهل رسائل الـ commits مفهومة، وهل يوجد README.

من أين يبدأ المبتدئ

لا داعي لتعلم Git وGitHub معاً — الترتيب مهم. ابدأ أولاً بالدورة المحلية: git init وgit status وgit add وgit commit وgit log، والفروع والدمج. وعندما تعمل ذلك دون مساعدة سجّل في GitHub، واضبط SSH، وتعلم push وpull وfetch. والخطوة الأخيرة هي العمل الجماعي: fork، وفرع لكل مهمة، وpull request، ومراجعة.

ماذا يرى صاحب العمل في GitHub الخاص بك

المربعات الخضراء للنشاط ليست الأهم. فالمراجع المتمرس يقيّم في دقائق أموراً أخرى:

  • رسائل commits مفهومة بدلاً من «fix» و«123» و«تعديلات»؛
  • commits صغيرة ومنطقية، لا commit ضخم واحد باسم «رفع المشروع»؛
  • README يشرح كيفية تشغيل المشروع؛
  • ملف .gitignore: لا توجد في المستودع node_modules أو ملف .env يحوي كلمات مرور أو ملفات IDE؛
  • فروع وpull requests حتى في المشاريع التعليمية — وهذا يدل على أنك تعرف سير العمل الجماعي.

أخطاء شائعة عند المبتدئين

«fatal: not a git repository»

تشغّل أمر Git خارج مستودع. انتقل إلى مجلد المشروع، أو نفّذ git init. التسجيل في GitHub لا علاقة له بهذا — إنه خطأ محلي في Git.

«Permission denied (publickey)»

مفتاح SSH غير منشأ، أو غير مضاف إلى GitHub، أو غير محمّل في ssh-agent. تحقق بالأمر ssh -T git@github.com ومن قائمة المفاتيح في إعدادات الحساب.

«rejected … (fetch first)» عند push

يوجد على الخادم commits ليست لديك — مثلاً أنشأت المستودع على GitHub مع README. اسحب التغييرات أولاً: git pull --rebase origin main، ثم أعد git push. ولا تستخدم --force ما لم تفهم عمل مَن ستكتب فوقه.

أسرار في مستودع عام

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

الخلاصة

Git أداة التحكم في الإصدارات على حاسوبك، وGitHub خدمة تحفظ هذه المستودعات في السحابة وتبني حولها العمل الجماعي. وGitLab وBitbucket وغيرهما بدائل لـ GitHub لا لـ Git: فالجميع يحفظ الـ commits والفروع والأوامر نفسها. ابدأ بـ Git المحلي، ثم اربط remote واضبط SSH. وربط المستودع المحلي بـ GitHub وpush وpull وfetch مشروح عملياً في دورة Git.

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

هل GitHub مجاني؟

نعم، تتيح الخطة المجانية إنشاء عدد غير محدود من المستودعات العامة والخاصة. وتضيف الخطط المدفوعة ميزات متقدمة للفرق، ومزيداً من دقائق GitHub Actions للمشاريع الخاصة.

هل يمكن استخدام GitHub دون سطر الأوامر؟

نعم، عبر GitHub Desktop أو لوحات Git المدمجة في المحررات. لكن هذه الأدوات تنفذ أوامر Git نفسها، ومن المفيد فهمها، خاصة عند التعارضات.

هل أحتاج إلى تثبيت Git إذا كان لدي حساب على GitHub؟

نعم. الحساب يوفر مكاناً للتخزين، أما العمل مع الكود محلياً — من commits وفروع وpush — فيتم عبر Git المثبّت على جهازك.

كيف أنقل مستودعاً من GitHub إلى GitLab؟

أضف remote جديداً وأرسل كل الفروع والوسوم: git push gitlab --all وgit push gitlab --tags. ينتقل التاريخ كاملاً لأن الخدمتين تعملان بـ Git.

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

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

تعلّم هذا الموضوع بالفيديو

يُشرح هذا الموضوع بالتفصيل مع التطبيق العملي في دورة «Git من الصفر إلى مطور واثق».

الانتقال إلى الدورة