Git: إنشاء مستودع Git

يُعد مستودع Git جوهر نظام التحكم في الإصدارات؛ حيث يتم تخزين كل سجل الكود والفروع والعلامات في هذا المستودع. يقدم هذا الدرس شرحًا مفصلاً حول كيفية إنشاء المستودعات وإدارتها.

1. نظرة عامة على مستودعات Git

مستودع Git هو قاعدة بيانات تحتوي على جميع الملفات الموجودة في المشروع وسجلها الكامل.

(1) ما هو مستودع Git؟

مستودع Git هو دليل يحتوي على ملفات المشروع وسجل الإصدارات. ويتميز بالخصائص التالية:

(2) طريقتان لإنشاء مستودع

100%
graph TB
    A[CreateGitWarehouse] --> B[git init<br/>Create a New Repository from Scratch]
    A --> C[git clone<br/>Clone a Remote Repository]
    
    B --> D[Empty Warehouse<br/>You need to add the files manually.]
    C --> E[Complete Repository<br/>Includes all historical data]
    
    style A fill:#e1f5ff
    style B fill:#fff4e1
    style C fill:#fff4e1

الفرق بين الطريقتين:

الطريقة الأمر السيناريوهات القابلة للتطبيق يتضمن السجل
التهيئة git init إنشاء مشروع جديد ❌ مستودع فارغ
نسخ git clone الانضمام إلى مشروع موجود ✅ السجل الكامل


2. تهيئة مستودع باستخدام git init

يقوم الأمر git init بتحويل دليل عادي إلى مستودع Git.

(1) عملية التهيئة

100%
graph LR
    A[Create a Directory] --> B[Go to the Table of Contents]
    B --> C[Run git init]
    C --> D[Create .git Table of Contents]
    D --> E[The warehouse was successfully created.]
    
    style A fill:#e1f5ff
    style E fill:#d4edda

(2) الاستخدام الأساسي

BASH
# Method1:Initialize in the current directory
cd my-project
git init

# Method2:Create and initialize a new directory
git init my-project

▶ مثال: إنشاء مستودع جديد

BASH
# Steps1:Create a project directory
mkdir my-project

# Steps2:Go to the Table of Contents
cd my-project

# Steps3:InitializationGitWarehouse
git init
# Output:
# Initialized empty Git repository in /path/to/my-project/.git/

# Steps4:View Repository Status
git status
# Output:
# On branch main
# No commits yet
# nothing to commit (create/copy files and use "git add" to track)

# Steps5:View the directory structure
ls -la
# Output:
# total 0
# drwxr-xr-x  3 user group 4096 Jan 1 00:00 .
# drwxr-xr-x  3 user group 4096 Jan 1 00:00 ..
# drwxr-xr-x  7 user group 4096 Jan 1 00:00 .git

(3) التهيئة في مشروع موجود

إذا كان لديك ملف مشروع بالفعل، فيمكنك تهيئته مباشرةً في دليل المشروع:

BASH
# Go to the directory of the existing project
cd existing-project

# InitializationGitWarehouse
git init

# View Status(All existing files are untracked.)
git status
# Output:
# Untracked files:
#   src/
#   README.md
#   package.json
💡 نصيحة: لا يقوم git init بتعديل الملفات الموجودة؛ بل يكتفي بإنشاء المجلد .git. وستصبح جميع الملفات الموجودة «غير متتبعة».



3. بنية دليل .git

.git الدليل هو جوهر مستودع Git، ويخزن جميع معلومات التحكم في الإصدارات.

(1) شرح مفصل لهيكل الدلائل

TEXT 📖 للعرض فقط
.git/
├── HEAD           # Current branch pointer
├── config         # Local Configuration File
├── description    # Repository Description (for GitWeb)
├── hooks/         # Hook Scripts Directory
│   ├── pre-commit.sample
│   └── post-commit.sample
├── info/          # Additional Information
│   └── exclude    # Local Ignore Rules
├── objects/       # All Data Objects (Commits, Trees, Documents)
│   ├── info/
│   └── pack/
├── refs/          # Quote(Branch、Tags)
│   ├── heads/     # Local Branch
│   └── tags/      # Tags
└── index          # Buffer Information(Documents)

(2) ملاحظات حول الوثائق المهمة

الملف/المجلد الوصف مثال على المحتوى
HEAD يشير إلى الفرع الحالي ref: refs/heads/main
التكوين التكوين المحلي عنوان المستودع البعيد، ومعلومات المستخدم، وما إلى ذلك
objects/ Stores all data objects Commits, trees, file snapshots (stored in compressed form)
refs/heads/ مؤشر الفرع المحلي ملف واحد لكل فرع، يحتوي على هاش الالتزام
refs/tags/ مؤشرات العلامات ملف واحد لكل علامة
الفهرس معلومات المخزن المؤقت تسجل حالة الملفات الموجودة في المخزن المؤقت

▶ مثال: عرض الدليل .git

BASH
# Steps1:View.gitTable of Contents
ls -la .git
# Output:
# -rw-r--r--  1 user group   23 Jan 1 00:00 HEAD
# -rw-r--r--  1 user group  137 Jan 1 00:00 config
# -rw-r--r--  1 user group   73 Jan 1 00:00 description
# drwxr-xr-x  2 user group 4096 Jan 1 00:00 hooks
# drwxr-xr-x  2 user group 4096 Jan 1 00:00 info
# drwxr-xr-x  4 user group 4096 Jan 1 00:00 objects
# drwxr-xr-x  4 user group 4096 Jan 1 00:00 refs

# Steps2:ViewHEADDocuments
cat .git/HEAD
# Output:ref: refs/heads/main

# Steps3:View Profile
cat .git/config
# Output:
# [core]
#     repositoryformatversion = 0
#     filemode = true
#     bare = false
#     logallrefupdates = true

# Steps4:View the branch directory
ls -la .git/refs/heads
# Output:(Initially empty,After creating a commit, there will bemainDocuments)

(3) شرح مفصل لمجلد «objects»

objects يخزن المستودع جميع كائنات بيانات Git، مستخدمًا التجزئات SHA-1 كأسماء ملفات:

TEXT 📖 للعرض فقط
objects/
├── 4a/          # Before hashing2"as" as the directory name
│   └── 8b2f...  # After hashing38"as" as the filename
├── info/
└── pack/        # Packaging and Storage(Space-saving)

نوع الكائن:

⚠️ ملاحظة: لا تقم بتعديل الملفات يدويًّا في الدليل .git ما لم تكن متأكدًا تمامًا مما تفعله! فقد تؤدي التعديلات غير الصحيحة إلى تلف المستودع.



4. استنساخ مستودع باستخدام git clone

يُستخدم الأمر git clone لنسخ مستودع بعيد إلى جهازك المحلي.

(1) دور الاستنساخ

يقوم الاستنساخ بتنفيذ العمليات التالية:

  1. تنزيل السجل الكامل: يتضمن جميع عمليات التسجيل والفروع والعلامات
  2. إنشاء مستودع محلي: قم بإنشاء دليل .git على جهازك المحلي
  3. ربط جهاز التحكم عن بُعد تلقائيًا: إنشاء مرجع لجهاز التحكم عن بُعد باسم origin
  4. الفرع الافتراضي: عادةً ما يكون main أو master

(2) صيغة أمر «Clone»

BASH
# Basic Syntax
git clone <Warehouse Address>

# Clone to the specified directory
git clone <Warehouse Address> <Directory Name>

# Shallow Cloning(Clone Only RecentNNext Submission)
git clone --depth <In-Depth> <Warehouse Address>

# Clone a Single Branch
git clone -b <Branch Name> --single-branch <Warehouse Address>

▶ مثال: استنساخ مستودع GitHub

BASH
# Method1:UsageHTTPSClone(Recommended for Beginners)
git clone https://github.com/user/repo.git
# Output:
# Cloning into 'repo'...
# remote: Enumerating objects: 100, done.
# remote: Counting objects: 100% (100/100), done.
# remote: Compressing objects: 100% (80/80), done.
# remote: Total 100 (delta 20), reused 100 (delta 20), pack-reused 0
# Receiving objects: 100% (100/100), done.
# Resolving deltas: 100% (20/20), done.

# Method 2: Use SSH Clone (requires SSH key configuration)
git clone git@github.com:user/repo.git

# Method3:Clone to the specified directory
git clone https://github.com/user/repo.git my-project

# Method4:Shallow Cloning(Clone Only Recent1Next Submission,Fast)
git clone --depth 1 https://github.com/user/repo.git

# Steps:Verify the cloning results
cd repo
git remote -v
# Output:
# origin  https://github.com/user/repo.git (fetch)
# origin  https://github.com/user/repo.git (push)

(3) هيكل الدليل بعد النسخ

100%
graph TB
    A[Remote Repository<br/>github.com/user/repo] --> B[git clone]
    B --> C[Local Warehouse]
    C --> D[.git Table of Contents<br/>Complete History+Remote Configuration]
    C --> E[Project Documents<br/>The latest version of the default branch]
    D --> F[origin Remote References]
    
    style A fill:#e1f5ff
    style C fill:#d4edda
💡 نصيحة: يؤدي النسخ إلى إنشاء اتصال عن بُعد تلقائيًا origin يشير إلى عنوان المستودع الأصلي. يمكنك الاطلاع عليه باستخدام git remote -v.



5. الاطلاع على حالة المستودع

git status هو الأمر الأساسي للتحقق من الحالة الحالية للمستودع.

(1) أنواع حالات الملفات

100%
graph LR
    A[Document Status] --> B[Not tracked<br/>Untracked]
    A --> C[Modified<br/>Modified]
    A --> D[Saved<br/>Staged]
    A --> E[Submitted<br/>Committed]
    
    B -->|git add| D
    C -->|git add| D
    D -->|git commit| E
    E -->|Edit File| C
    
    style B fill:#fff3cd
    style C fill:#ffe6e6
    style D fill:#d4edda
    style E fill:#c3e6cb

(2) جدول وصف الحالة

الحالة الاسم باللغة الإنجليزية الوصف الإجراء التالي
غير مُتتبع غير مُتتبع ملف جديد، غير مُتتبع بواسطة Git git add أُضيف إلى منطقة التجهيز
تم التعديل تم التعديل تم تعديل الملف المتتبع ولكن لم يتم نقله إلى منطقة التحضير git add أُضيف إلى منطقة التحضير
قيد الإعداد قيد الإعداد أُضيف إلى بيئة الإعداد، جاهز للتثبيت git commit تثبيت
تم الإيداع تم الإيداع تم الإيداع في المستودع المحلي مواصلة العمل أو الإرسال

▶ مثال: التحقق من حالة المستودع

BASH
# Steps1:Initialize the repository
mkdir demo && cd demo
git init

# Steps2:View Initial State(Empty Warehouse)
git status
# Output:
# On branch main
# No commits yet
# nothing to commit (create/copy files and use "git add" to track)

# Steps3:Create a New File
echo "# Demo Project" > README.md

# Steps4:View Status(Not tracked)
git status
# Output:
# On branch main
# No commits yet
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#     README.md
# nothing added to commit but untracked files present

# Steps5:Add to Stash
git add README.md

# Steps6:View Status(Saved)
git status
# Output:
# On branch main
# No commits yet
# Changes to be committed:
#   (use "git rm --cached <file>..." to unstage)
#     new file:   README.md

# Steps7:Submit
git commit -m "Initial commit"

# Steps8:View Status(Clean)
git status
# Output:
# On branch main
# nothing to commit, working tree clean

(3) نظرة عامة على الحالة

استخدم الخيار -s لعرض إخراج موجز للحالة:

BASH
git status -s
# Output Example:
#  M modified-file.txt    # Modified(On the leftMIndicates a temporary storage area,on the rightMIndicates workspace)
# A  new-file.txt         # New files that have been cached
# ?? untracked-file.txt   # Untracked files


❓ أسئلة شائعة

س ما الفرق بين git init وgit clone؟
ج git init ينشئ مستودعًا فارغًا جديدًا تمامًا، وهو مناسب للمشاريع الجديدة؛ أما git clone فينسخ مستودعًا بعيدًا موجودًا بالفعل (بما في ذلك سجله الكامل)، وهو مناسب للانضمام إلى مشروع قائم.
س هل يمكنني حذف المجلد .git؟
ج نعم، لكن هذا سيؤدي إلى حذف سجل الإصدارات بالكامل! بعد الحذف، سيصبح الدليل مجلدًا عاديًا ولن يكون مستودع Git بعد ذلك. لا ينبغي عليك حذفه إلا إذا كنت متأكدًا من أنك لم تعد بحاجة إلى سجل الإصدارات.
س كيف يمكنني تهيئة مستودع في دليل يحتوي بالفعل على ملفات؟
ج قم بتشغيل git init مباشرةً في الدليل. لن يقوم Git بتعديل أي ملفات موجودة؛ بل سيكتفي بإنشاء دليل .git. وستُصنف جميع الملفات الموجودة على أنها غير مُتتبعة.
س ماذا أفعل إذا كان استنساخ المستودع بطيئًا؟
ج يمكنك استخدام نسخة سطحية git clone --depth 1 <url>، والتي تنسخ أحدث «كوميت» فقط وتكون أسرع. وهذا مناسب للحالات التي تحتاج فيها إلى أحدث كود فقط ولا تحتاج إلى السجل.

📖 ملخص


📝 تمارين

  1. تمرين أساسي (مستوى الصعوبة: ⭐): أنشئ مستودع Git باسم my-first-repo، وافحص بنية الدلائل في .git، واشرح الغرض من ملف HEAD.

  2. تمرين متقدم (مستوى الصعوبة ⭐⭐): أنشئ ملف README.md ومجلد src في المستودع. استخدم git status لمراقبة التغييرات في حالات الملفات، وسجل معنى كل حالة.

  3. التحدي (الصعوبة: ⭐⭐⭐): انسخ مستودع GitHub عام (على سبيل المثال، https://github.com/octocat/Hello-World.git)، وراجع إعدادات الاتصال عن بُعد (git remote -v)، وشرح معنى وغرض origin.

Web-Tutorial.com

فريق Web-Tutorial التقني

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

100%