Repository در Git: چیست، چه انواعی دارد و چگونه کار می‌کند

نویسنده: IT Sectr منتشر شده: 2026-05-09 زمان مطالعه: 8 دقیقه

مخزن گیت — مخزن کد منبع پروژه است که در آن گیت هر تغییر فایل را در طول توسعه ردیابی می‌کند. مخزن شامل تاریخچه کامل commitها، شاخه‌ها و برچسب‌ها است که به توسعه‌دهندگان امکان کار مشترک روی کد را می‌دهد. بر اساس گیت، ۲۰۲۴، مخزن اساس هر سیستم کنترل نسخه است و در میلیون‌ها پروژه در سراسر جهان استفاده می‌شود.

نکات اصلی

  • مخزن گیت — دایرکتوری پروژه با پوشه خدماتی .git است که تمام تاریخچه تغییرات در آن ذخیره می‌شود.
  • مخزن محلی روی رایانه توسعه‌دهنده قرار دارد و امکان کار با کد بدون اتصال به اینترنت را فراهم می‌کند.
  • مخزن راه دور روی سرور گیت‌هاب، گیت‌لب یا بیت‌باکت قرار می‌گیرد و برای همگام‌سازی بین شرکت‌کنندگان استفاده می‌شود.
  • گیت داده‌ها را به‌عنوان عکس‌های فوری از فایل‌ها ذخیره می‌کند نه به‌عنوان فهرست تغییرات، که عملیات انشعاب و ادغام را سرعت می‌بخشد.
  • سیستم کنترل نسخه مشکل کار همزمان روی یک پروژه را حل می‌کند و از بروز تضاد هنگام ادغام کد جلوگیری می‌کند.

مخزن در گیت چیست

مخزن گیت — ساختار داده‌ای است که سیستم کنترل نسخه ابرداده و اشیاء توصیف‌کننده تاریخچه تغییرات فایل‌های پروژه را در آن ذخیره می‌کند. وقتی توسعه‌دهنده با دستور git init یک مخزن را مقداردهی اولیه می‌کند، گیت پوشه مخفی .git را در ریشه پروژه ایجاد می‌کند.

در داخل این پوشه همه اشیاء، ارجاع‌ها و فایل‌های پیکربندی لازم برای کار سیستم قرار دارند. مخزن به مکان خاصی محدود نیست — توسعه‌دهنده می‌تواند آن را به‌صورت محلی ایجاد کند و سپس به سرور راه دور متصل کند.

گیت از مدل مخزن توزیع‌شده استفاده می‌کند: هر شرکت‌کننده در پروژه یک کپی کامل از تاریخچه روی رایانه خود دارد. این بدان معناست که بیشتر عملیات‌ها — commit، مشاهده تاریخچه، ایجاد شاخه‌ها — به‌صورت محلی بدون مراجعه به سرور انجام می‌شود.

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

مخزن محلی و راه دور

مخزن محلی — کپی پروژه روی رایانه توسعه‌دهنده است. این مخزن شامل تمام تاریخچه commitها، شاخه‌ها و برچسب‌ها است و امکان انجام عملیات commit، branch، merge و rebase را بدون اتصال به شبکه فراهم می‌کند.

مخزن راه دور روی سرور قرار دارد و به‌عنوان نقطه همگام‌سازی برای همه اعضای تیم عمل می‌کند. توسعه‌دهندگان تغییرات خود را با دستور git push ارسال می‌کنند و تغییرات دیگران را با دستور git pull دریافت می‌کنند.

ارتباط بین مخزن محلی و راه دور از طریق remote origin — URL سروری که در پیکربندی گیت ذخیره می‌شود — برقرار می‌شود. یک مخزن محلی می‌تواند به چندین مخزن راه دور متصل شود که هنگام کار با forkها مفید است.

مزیت اصلی این مدل این است که توسعه‌دهنده می‌تواند به‌صورت آفلاین روی کد کار کند و تغییرات را فقط هنگام آمادگی برای ارسال نتیجه همگام‌سازی کند.

تفاوت‌های بین مخزن محلی و راه دور

ویژگیمحلیراه دور
مکانروی رایانه توسعه‌دهندهروی سرور (GitHub, GitLab)
دسترسی بدون شبکهدسترسی کامل به همه عملیات‌هابدون اتصال در دسترس نیست
همگام‌سازیPush/Pull با راه دوردریافت push از محلی
پشتیبان‌گیریدر برابر از دست رفتن داده محافظت نمی‌شودروی سرور با پشتیبان ذخیره می‌شود

گیت چگونه داده‌ها را در مخزن ذخیره می‌کند

مدل ذخیره‌سازی گیت اساساً با سایر سیستم‌های کنترل نسخه متفاوت است. به جای ذخیره فهرست تغییرات (دلتا) بین نسخه‌ها، گیت عکس‌های فوری کامل از همه فایل‌های پروژه را در زمان هر commit ذخیره می‌کند.

هر شیء در مخزن با یک هش SHA-1 منحصربه‌فرد به طول ۴۰ کاراکتر شناسایی می‌شود. اگر محتوای فایل بین commitها تغییر نکرده باشد، گیت یک شیء جدید ایجاد نمی‌کند بلکه از شیء موجود دوباره استفاده می‌کند — این کار باعث صرفه‌جویی در فضا می‌شود.

گیت از چهار نوع شیء استفاده می‌کند: blob (محتوای فایل)، tree (ساختار دایرکتوری)، commit (عکس فوری با فراداده) و tag (ارجاع نام‌گذاری‌شده به commit). همه اشیاء در پوشه .git/objects ذخیره می‌شوند.

بر اساس Git Internals، مدل اشیاء گیت یکپارچگی داده را تضمین می‌کند: هر تغییری در محتوای فایل منجر به هش جدید می‌شود که تغییر مخفیانه تاریخچه را غیرممکن می‌کند.

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

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

  • objects/ — همه اشیاء مخزن: blobs، trees، commits، tags. به صورت فشرده ذخیره می‌شوند.
  • refs/ — ارجاع‌ها به commitها: heads (شاخه‌ها)، tags (برچسب‌ها)، remotes (شاخه‌های راه دور).
  • HEAD — فایلی که به شاخه یا commit فعال فعلی اشاره می‌کند.
  • config — تنظیمات مخزن: URL راه دور، نام کاربری، ایمیل و سایر پارامترها.
  • index — staging area (نمایه)، جایی که گیت اطلاعات مربوط به فایل‌های آماده شده برای commit را ذخیره می‌کند.
  • logs/ — ثبت‌های به‌روزرسانی ارجاع (reflog) که تاریخچه جابجایی HEAD و شاخه‌ها را ذخیره می‌کند.

فایل HEAD شایسته توجه ویژه است. در حالت عادی، این فایل شامل یک ارجاع نمادین به یک شاخه است، به عنوان مثال ref: refs/heads/main. در حالت detached HEAD، مستقیماً به یک commit اشاره می‌کند — این بدان معناست که commitهای جدید به هیچ شاخه‌ای متصل نخواهند بود.

عملیات اصلی با مخزن

کار با مخزن گیت شامل مجموعه‌ای از عملیات پایه است که توسعه‌دهنده روزانه انجام می‌دهد. هر عملیات وضعیت مخزن را تغییر می‌دهد، اشیاء جدید اضافه می‌کند یا ارجاع‌ها را جابجا می‌کند.

  • git init — یک مخزن خالی جدید در دایرکتوری فعلی ایجاد می‌کند. گیت پوشه .git را با ساختار اولیه می‌سازد.
  • git clone — یک مخزن راه دور موجود را به همراه تمام تاریخچه commitها روی رایانه محلی کپی می‌کند.
  • git add — تغییرات فایل‌ها را به staging area (نمایه) اضافه می‌کند و آنها را برای commit آماده می‌کند.
  • git commit — بر اساس داده‌های موجود در نمایه، یک عکس فوری از پروژه ایجاد می‌کند و آن را به‌عنوان یک شیء commit جدید ذخیره می‌کند.
  • git push — commitهای جدید را از مخزن محلی به مخزن راه دور ارسال می‌کند و شاخه‌ها را روی سرور به‌روز می‌کند.
  • git pull — commitهای جدید را از مخزن راه دور دریافت می‌کند و آنها را با شاخه محلی فعلی ادغام می‌کند.

عملیات push و pull — تنها عملیات‌هایی هستند که نیاز به اتصال به سرور راه دور دارند. سایر عملیات‌ها کاملاً به‌صورت محلی انجام می‌شوند که سرعت کار بالا را حتی با حجم زیاد تاریخچه تضمین می‌کند.

چرخه حیات فایل در مخزن

هر فایل در مخزن چهار حالت را طی می‌کند: untracked (ردیابی نشده)، modified (تغییر یافته)، staged (آماده شده) و committed (ثبت شده). گیت فقط فایل‌هایی را که به صراحت از طریق git add اضافه شده‌اند یا در تاریخچه commitها هستند، ردیابی می‌کند.

درک این مدل — کلید کار مؤثر با گیت است. توسعه‌دهنده می‌تواند فقط بخشی از فایل‌های تغییر یافته را به‌صورت انتخابی برای commit آماده کند و commitهای منطقی کامل با توضیحات واضح ایجاد کند.

مخازن راه دور معمولاً در پلتفرم‌های تخصصی قرار می‌گیرند که رابط وب، سیستم مدیریت دسترسی و ابزارهای اضافی برای توسعه مشترک ارائه می‌دهند.

  • GitHub — بزرگترین پلتفرم با بیش از ۱۰۰ میلیون مخزن. Actions، Pull Requests، Issues و Wiki ارائه می‌دهد. برای پروژه‌های عمومی رایگان است.
  • GitLab — پلتفرمی با CI/CD یکپارچه، Container Registry و خط لوله DevOps داخلی. به‌صورت SaaS و نسخه self-hosted در دسترس است.
  • Bitbucket — راه‌حلی از Atlassian با یکپارچه‌سازی Jira و Trello. به دلیل تنظیمات دسترسی انعطاف‌پذیر در محیط شرکتی محبوب است.

انتخاب پلتفرم به اندازه تیم، نیازهای حریم خصوصی و یکپارچه‌سازی‌های لازم بستگی دارد. برای توسعه موبایل اغلب GitHub انتخاب می‌شود به دلیل پشتیبانی گسترده جامعه و یکپارچه‌سازی با ابزارهای CI/CD برای iOS و Android.

نمونه دستورات کار با مخزن

یک سناریوی عملی را در نظر می‌گیریم: توسعه‌دهنده یک مخزن موجود را کلون می‌کند، یک شاخه جدید ایجاد می‌کند، تغییرات اعمال می‌کند و آنها را به سرور ارسال می‌کند. هر دستور کار با اجزای مختلف مخزن را نشان می‌دهد.

bash
# کلون کردن مخزن راه دور
git clone https://github.com/user/mobile-app.git

# رفتن به دایرکتوری پروژه
cd mobile-app

# ایجاد شاخه جدید feature و جابجایی به آن
git checkout -b feature/auth

# بررسی وضعیت فایل‌های تغییر یافته
git status

# اضافه کردن همه تغییرات به staging area
git add .

# ایجاد commit با توضیحات
git commit -m "Add authentication module"

# ارسال تغییرات به مخزن راه دور
git push origin feature/auth

دستور git status — یکی از مفیدترین دستورات در کار روزانه است. نشان می‌دهد کدام فایل‌ها تغییر کرده‌اند، کدام‌ها برای commit آماده هستند و کدام‌ها اصلاً توسط گیت ردیابی نمی‌شوند.

مشاهده تاریخچه commitها

برای تحلیل تاریخچه مخزن از دستور git log با پرچم‌های مختلف قالب‌بندی استفاده می‌شود. این دستور زمان‌بندی commitها، نویسندگان، تاریخ‌ها و شناسه‌های SHA-1 را نمایش می‌دهد.

bash
# مشاهده تاریخچه با نمایش گراف شاخه‌ها
git log --oneline --graph --all

# مشاهده تغییرات در یک commit خاص
git show a1b2c3d

# مقایسه وضعیت فعلی با آخرین commit
git diff HEAD

# مشاهده تاریخچه یک فایل خاص
git log --follow src/MainActivity.kt

پرچم --graph یک نمودار ASCII از انشعابات را نمایش می‌دهد که به‌ویژه در مخازن با کار فعال در چندین شاخه مفید است. برای پروژه‌های موبایل با انتشارات مکرر، نمودار بصری به ارزیابی سریع ساختار توسعه کمک می‌کند.

سؤالات متداول

تفاوت مخزن با پروژه چیست؟

مخزن — یک انبار فنی کد با تاریخچه تغییرات است. پروژه — مفهوم گسترده‌تری است که شامل مخزن، سیستم مدیریت وظایف، مستندات و فرآیندهای توسعه می‌شود. یک پروژه می‌تواند چندین مخزن داشته باشد.

چگونه یک مخزن در GitHub ایجاد کنیم؟

یک مخزن جدید از طریق رابط وب GitHub با کلیک روی دکمه New ایجاد کنید. نام، توضیحات و سطح دسترسی را مشخص کنید. سپس مخزن را روی رایانه محلی کلون کنید یا یک مخزن محلی موجود را از طریق git remote add origin متصل کنید.

آیا می‌توان مخزن حذف‌شده را بازیابی کرد؟

اگر مخزن راه دور از سرور حذف شده باشد، اما حداقل یک توسعه‌دهنده یک کپی محلی داشته باشد، مخزن قابل بازیابی است. کافی است یک مخزن راه دور جدید ایجاد کرده و git push --force را از کپی محلی با تمام تاریخچه اجرا کنید.

فورک مخزن چیست؟

فورک — کپی از مخزن شخص دیگر در حساب شماست. شما یک کپی کامل از تاریخچه دریافت می‌کنید و می‌توانید بدون تأثیر بر نسخه اصلی هر تغییری ایجاد کنید. فورک‌ها برای مشارکت در پروژه‌های منبع‌باز از طریق Pull Request استفاده می‌شوند.

چگونه اندازه مخزن را کاهش دهیم؟

از git gc برای فشرده‌سازی اشیاء و حذف داده‌های غیرقابل دسترس استفاده کنید. فایل‌های بزرگ را از تاریخچه از طریق git filter-branch یا git filter-repo حذف کنید. برای پروژه‌هایی با فایل‌های باینری، Git LFS (Large File Storage) را در نظر بگیرید.

خلاصه

  • مخزن گیت — مخزن کد با تاریخچه کامل تغییرات است، جایی که هر commit یک عکس فوری از همه فایل‌های پروژه در یک لحظه خاص است.
  • مخزن محلی روی رایانه توسعه‌دهنده ذخیره می‌شود و از مجموعه کامل عملیات گیت بدون اتصال به شبکه پشتیبانی می‌کند.
  • مخزن راه دور کار تیم را از طریق push و pull همگام‌سازی می‌کند و یک منبع واحد حقیقت را برای همه شرکت‌کنندگان فراهم می‌کند.
  • پوشه .git شامل تمام اطلاعات خدماتی است: اشیاء، ارجاع‌های شاخه، پیکربندی و ثبت عملیات reflog.
  • GitHub، GitLab و Bitbucket — پلتفرم‌های اصلی برای ذخیره مخازن راه دور با ابزارهای اضافی CI/CD.
  • مدل اشیاء گیت از هش‌های SHA-1 برای شناسایی هر شیء استفاده می‌کند که یکپارچگی داده‌های مخزن را تضمین می‌کند.
  • توصیه: حداقل یک بار در روز commit کنید و پس از هر مرحله تکمیل‌شده کار با مخزن راه دور همگام‌سازی کنید.

ما یک اپلیکیشن موبایل به صورت کلید در دست توسعه خواهیم داد

IT Sectr از سال 2017 برنامه‌های iOS و Android را برای استارتاپ‌ها و کسب‌وکارها ایجاد می‌کند. ما به شما مشاوره می‌دهیم و بهترین راه‌حل را پیشنهاد خواهیم کرد.

بحث درباره پروژه

همچنین بخوانید