Gitبرنامه نویسی Programming

بازآفرینی فرآیند Init در Git؛ چه چیزی یک مخزن Git معتبر می‌سازد؟

Chapter 5: Recreating Git’s Init Process

Git در پشت صحنه یک سری کارهای مهم انجام می‌دهد تا پوشه‌ی شما به یک مخزن (Repository) معتبر تبدیل شود. اما دقیقاً چه اتفاقی می‌افتد؟ در این فصل می‌خواهیم به عمق Git برویم و ببینیم چه چیزی یک مخزن Git را تشکیل می‌دهد و چطور می‌توانیم فرآیند git init را به‌صورت دستی بازآفرینی کنیم.

وقتی دستور ساده‌ی زیر را اجرا می‌کنید:

git init

یک مخزن Git معتبر چیست؟

یک مخزن Git در ساده‌ترین حالت، پوشه‌ای است که شامل زیرپوشه‌ی مخفی .git باشد.
این پوشه‌ی .git قلب Git است و تمام اطلاعات مربوط به تاریخچه پروژه، شاخه‌ها، تنظیمات و اشیای Git را در خود نگه می‌دارد.

اگر .git وجود نداشته باشد، پوشه‌ی شما فقط یک دایرکتوری عادی است و Git آن را به‌عنوان مخزن نمی‌شناسد.

Git Folder Internals
Git Folder Internals

ساختار پوشه .git

بعد از اجرای git init، پوشه .git با ساختاری شبیه به این ساخته می‌شود:

.git/
├── HEAD
├── config
├── description
├── hooks/
├── info/
├── objects/
└── refs/

بیایید بخش‌های اصلی را بررسی کنیم:

1. فایل HEAD

  • اشاره می‌کند به شاخه‌ی فعلی.
  • معمولاً به refs/heads/master یا refs/heads/main اشاره دارد.

2. پوشه objects/

  • تمام داده‌های اصلی Git (Blob، Tree، Commit) در اینجا ذخیره می‌شوند.
  • هر شیء یک Hash منحصربه‌فرد دارد.

3. پوشه refs/

  • مسیر شاخه‌ها (branches) و تگ‌ها (tags) را نگه می‌دارد.

4. فایل config

  • تنظیمات مخزن (مثل نام ریموت‌ها، ویرایشگر پیش‌فرض و غیره).

5. پوشه hooks/

  • شامل اسکریپت‌هایی است که در رویدادهای خاص Git (مثل قبل از Commit) اجرا می‌شوند.

بازآفرینی دستی فرآیند git init

برای اینکه بهتر بفهمیم git init چه می‌کند، بیایید یک مخزن ساده را بدون استفاده از Git بسازیم:

  1. ایجاد پوشه پروژه:
mkdir my-repo
cd my-repo
  1. ساخت پوشه .git:
mkdir .git
  1. ساخت فایل‌ها و پوشه‌های ضروری:
cd .git
mkdir objects refs
echo "ref: refs/heads/main" > HEAD
touch config description

اکنون پوشه‌ی شما از نظر ساختاری یک مخزن Git معتبر است. البته هنوز خالی است و Commitی ندارد، اما Git می‌تواند آن را به‌عنوان Repository بشناسد.

تست مخزن دستی ساخته شده

برگردید به پوشه اصلی (my-repo) و دستور زیر را اجرا کنید:

git status

اگر همه چیز درست باشد، Git به شما خواهد گفت که در شاخه‌ی main هستید و هنوز Commitی وجود ندارد.

چرا دانستن این موضوع مهم است؟

  • باعث می‌شود درک عمیق‌تری از معماری Git داشته باشید.
  • اگر مخزن خراب شود (مثلاً پوشه .git آسیب ببیند)، راحت‌تر می‌توانید مشکل را رفع کنید.
  • برای کسانی که می‌خواهند درک کنند Git چگونه داده‌ها را ذخیره و مدیریت می‌کند، این دانش پایه‌ای است.

جمع‌بندی

  • دستور git init تنها یک فرمان ساده نیست؛ بلکه ساختاری پیچیده از پوشه‌ها و فایل‌ها را ایجاد می‌کند.
  • قلب هر مخزن Git، پوشه .git است که شامل HEAD، objects، refs و config می‌باشد.
  • با بازآفرینی دستی فرآیند git init، بهتر متوجه می‌شویم چه چیزی یک مخزن معتبر Git را تشکیل می‌دهد.

در فصل بعد (Chapter 6: Commits and Diff) یاد می‌گیریم که Commitها چگونه ذخیره می‌شوند و تفاوت‌ها (Diff) در Git چه نقشی دارند.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا