بازآفرینی فرآیند 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
بعد از اجرای 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 بسازیم:
- ایجاد پوشه پروژه:
mkdir my-repo
cd my-repo
- ساخت پوشه
.git
:
mkdir .git
- ساخت فایلها و پوشههای ضروری:
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 چه نقشی دارند.