EduFlow
Git و GitHub
⁦0%⁩

الوحدة 1 · نموذج Git

التثبيت والإعداد وأول commit لك

16 دقراءة 4 داملأ الفراغات

الدرس في لمحة

ثبّت Git، واضبط اسمك وبريدك والفرع الافتراضي والمحرّر مرة واحدة، ثم حوّل مجلد موقعك الشخصي إلى repository وسجّل أول commit فيه.

  1. 1ثبّت Git
  2. 2عرّف Git بنفسك
  3. 3ثلاثة تفضيلات تستحق الضبط الآن
  4. 4أنشئ الـ repository
  5. 5أنشئ أول commit

لا فيديو هنا، بل الشيء الحقيقي: درس مكتوب وأمثلة قابلة للتشغيل واختبار وتدريب.

قبل أن يسجّل Git أي شيء، يحتاج إلى معلومتين عنك وبعض التفضيلات. تضبطها مرة واحدة لكل حاسوب، وتؤثّر بهدوء في كل commit تنشئه لسنوات. عشر دقائق الآن توفّر عليك مئات الـ commits المنسوبة إلى «مجهول» أو إلى عنوان بريد لم تعد تملكه.

ثبّت Git

تحقّق أولًا هل Git مثبّت لديك:

Terminal
git --version

إن رأيت شيئًا مثل git version 2.51.0 فأنت جاهز؛ أي إصدار 2.4x أو أحدث يناسب هذا الكورس. وإن لم يكن مثبّتًا:

  • macOS: تشغيل git --version يعرض عليك تثبيت Xcode Command Line Tools، وهي تتضمّن Git. وإن كنت تستخدم Homebrew، فالأمر brew install git يمنحك إصدارًا أحدث.
  • Windows: ثبّت Git for Windows من git-scm.com. أبقِ الخيارات الافتراضية؛ فهي تتضمّن Git Bash (طرفية يعمل فيها كل أمر في هذا الكورس) و Git Credential Manager الذي ستستخدمه في القسم الثالث.
  • Linux: استخدم مدير الحزم لديك، مثلًا sudo apt install git على Ubuntu أو sudo dnf install git على Fedora.

عرّف Git بنفسك

يخزّن كل commit اسم المؤلف وبريده. اضبطهما على المستوى العام (global)، أي لحساب المستخدم الخاص بك على هذا الجهاز:

Terminal
git config --global user.name "Maya Okafor"
git config --global user.email "maya.okafor@example.com"

البريد أهمّ مما يبدو. يحدّد GitHub الصورة والملف الشخصي اللذين يظهران بجانب الـ commit بمطابقة البريد المخزّن داخله مع العناوين المسجّلة في حسابات GitHub. وإن كنت تفضّل ألّا تنشر عنوانك الحقيقي، فإن GitHub يعطي كل حساب عنوان noreply بالشكل 12345678+username@users.noreply.github.com (تجده في Settings ثم Emails)، ويمكنك استخدامه بدلًا من عنوانك.

ثلاثة تفضيلات تستحق الضبط الآن

Terminal
git config --global init.defaultBranch main
git config --global core.editor "code --wait"
git config --global --list
  • init.defaultBranch main يسمّي الفرع الأول في كل repository جديد main، وهو ما يطابق ما ينشئه GitHub. ودونه، ما زالت إصدارات Git 2.x تسمّي الفرع الأول master وتطبع تلميحًا طويلًا عن ذلك.
  • core.editor هو البرنامج الذي يفتحه Git حين يحتاج منك كتابة نص، مثل رسالة الـ commit. كثير من التثبيتات تستخدم Vim افتراضيًا، وهذا يفاجئ من لا يعرفه. code --wait يستخدم VS Code (والخيار --wait يُبقي Git منتظرًا حتى تغلق التبويب)؛ و nano خيار بسيط داخل الطرفية.
  • --list يطبع ما ضبطته لتتحقّق من الأخطاء الإملائية.

تُحفظ هذه الإعدادات في ملف نصي عادي هو ~/.gitconfig. والإعداد الذي يُضبط دون --global من داخل repository ما ينطبق على ذلك الـ repository وحده ويتقدّم على الإعداد العام. هذا مفيد إن أردت بريد العمل في repositories العمل وبريدك الشخصي في كل مكان آخر.

أنشئ الـ repository

أنشئ مجلدًا لموقعك الشخصي وحوّله إلى repository (مستودع):

Terminal
mkdir portfolio
cd portfolio
git init
Text
Initialized empty Git repository in /Users/maya/portfolio/.git/

مجلد .git المخفي هذا هو الـ repository: كل commit وكل فرع وكل إعداد لهذا المشروع يعيش داخله. أما الملفات التي تعدّلها فتوجد بجانبه. لا تعدّل أي شيء داخل .git بيدك، واعلم أن حذفه يحذف السجلّ ويترك ملفاتك الحالية كما هي.

أنشئ أول commit

أنشئ index.html بصفحة بسيطة:

index.html
<!doctype html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <title>Maya Okafor</title>
  </head>
  <body>
    <h1>Maya Okafor</h1>
    <p>Front-end developer in progress.</p>
  </body>
</html>

الآن اسأل Git عمّا يراه:

Terminal
git status
Text
On branch main

No commits yet

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	index.html

nothing added to commit but untracked files present (use "git add" to track)

Untracked تعني أن Git يرى الملف لكنه لم يسجّله قط. إنشاء الـ commit خطوتان: اختر ما يدخل فيه، ثم سجّله.

Terminal
git add index.html
git commit -m "Add home page"
Text
[main (root-commit) 3f9c2a1] Add home page
 1 file changed, 11 insertions(+)
 create mode 100644 index.html

اقرأ هذا الناتج: أنت على main، وهذا هو الـ root commit (الأول، ولا أب له)، ومعرّفه المختصر 3f9c2a1. سيختلف معرّفك، لأن المعرّف hash مشتقّ من المحتوى واسمك والوقت والأب. شغّل git log لترى الـ commit بمعرّفه الكامل ومؤلفه وتاريخه.

لماذا خطوتان بدل واحدة؟ لأن المسافة بين add و commit هي حيث تقرّر ما الذي ينتمي بعضه إلى بعض. لهذه المسافة اسم، الـ staging area (منطقة التجهيز)، وهي موضوع الدرس التالي.

أهم النقاط

  • شغّل git config --global مرة واحدة لكل جهاز لضبط user.name و user.email و init.defaultBranch و core.editor؛ ويخزّنها Git في ~/.gitconfig.
  • بريد الـ commit هو ما يحدّد حساب GitHub الذي يُنسب إليه الـ commit، لذا استخدم بريدًا يعرفه حسابك، مثل عنوان noreply.
  • git init ينشئ مجلدًا مخفيًا اسمه .git؛ هذا المجلد هو الـ repository، وحذفه يحذف السجلّ كله.
  • الـ commit خطوتان، git add لاختيار ما يدخل فيه و git commit -m لتسجيله مع رسالة.

قراءات إضافية

تحقّق من فهمك

4 أسئلة

السؤال 1 من 4

ضبطت user.email على عنوان عمل قديم. تُرفع الـ commits بلا مشكلة، لكن GitHub يعرضها بصورة رمادية غير مرتبطة بأي حساب. لماذا؟

السؤال 2 من 4

تشغّل git commit دون -m فيُفتح محرّر بملء الشاشة لا تعرفه. ما الذي حدث؟

السؤال 3 من 4

شغّلت git init في مجلد المستخدم الرئيسي بالخطأ، والآن يظهر كل مجلد على أنه “untracked”. ما الإصلاح الصحيح؟

السؤال 4 من 4

أيّ أمر يجعل كل repository جديد على جهازك يبدأ على فرع اسمه main؟

تدريب

املأ الفراغات

أعِدّ الموقع الشخصي وسجّل أول commit

املأ الفراغات بحيث يبدأ كل repository جديد على main، ويصبح مجلد portfolio مستودعًا، ويُسجَّل commit الصفحة الرئيسية مع كتابة الرسالة في سطر الأوامر نفسه (دون فتح محرّر).

git config --global user.email "maya.okafor@example.com" git config --global main mkdir portfolio && cd portfolio git git add index.html git commit "Add home page"