مخزن گیت — مخزن کد منبع پروژه است که در آن گیت هر تغییر فایل را در طول توسعه ردیابی میکند. مخزن شامل تاریخچه کامل commitها، شاخهها و برچسبها است که به توسعهدهندگان امکان کار مشترک روی کد را میدهد. بر اساس گیت، ۲۰۲۴، مخزن اساس هر سیستم کنترل نسخه است و در میلیونها پروژه در سراسر جهان استفاده میشود.
نکات اصلی
مخزن گیت — ساختار دادهای است که سیستم کنترل نسخه ابرداده و اشیاء توصیفکننده تاریخچه تغییرات فایلهای پروژه را در آن ذخیره میکند. وقتی توسعهدهنده با دستور 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 — قلب مخزن است. بدون آن گیت نمیتواند تغییرات را ردیابی کند و یک دایرکتوری معمولی فقط مجموعهای از فایلها باقی میماند. درک ساختار این پوشه به تشخیص مشکلات مخزن کمک میکند.
فایل HEAD شایسته توجه ویژه است. در حالت عادی، این فایل شامل یک ارجاع نمادین به یک شاخه است، به عنوان مثال ref: refs/heads/main. در حالت detached HEAD، مستقیماً به یک commit اشاره میکند — این بدان معناست که commitهای جدید به هیچ شاخهای متصل نخواهند بود.
کار با مخزن گیت شامل مجموعهای از عملیات پایه است که توسعهدهنده روزانه انجام میدهد. هر عملیات وضعیت مخزن را تغییر میدهد، اشیاء جدید اضافه میکند یا ارجاعها را جابجا میکند.
عملیات push و pull — تنها عملیاتهایی هستند که نیاز به اتصال به سرور راه دور دارند. سایر عملیاتها کاملاً بهصورت محلی انجام میشوند که سرعت کار بالا را حتی با حجم زیاد تاریخچه تضمین میکند.
هر فایل در مخزن چهار حالت را طی میکند: untracked (ردیابی نشده)، modified (تغییر یافته)، staged (آماده شده) و committed (ثبت شده). گیت فقط فایلهایی را که به صراحت از طریق git add اضافه شدهاند یا در تاریخچه commitها هستند، ردیابی میکند.
درک این مدل — کلید کار مؤثر با گیت است. توسعهدهنده میتواند فقط بخشی از فایلهای تغییر یافته را بهصورت انتخابی برای commit آماده کند و commitهای منطقی کامل با توضیحات واضح ایجاد کند.
مخازن راه دور معمولاً در پلتفرمهای تخصصی قرار میگیرند که رابط وب، سیستم مدیریت دسترسی و ابزارهای اضافی برای توسعه مشترک ارائه میدهند.
انتخاب پلتفرم به اندازه تیم، نیازهای حریم خصوصی و یکپارچهسازیهای لازم بستگی دارد. برای توسعه موبایل اغلب GitHub انتخاب میشود به دلیل پشتیبانی گسترده جامعه و یکپارچهسازی با ابزارهای CI/CD برای iOS و Android.
یک سناریوی عملی را در نظر میگیریم: توسعهدهنده یک مخزن موجود را کلون میکند، یک شاخه جدید ایجاد میکند، تغییرات اعمال میکند و آنها را به سرور ارسال میکند. هر دستور کار با اجزای مختلف مخزن را نشان میدهد.
# کلون کردن مخزن راه دور
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 آماده هستند و کدامها اصلاً توسط گیت ردیابی نمیشوند.
برای تحلیل تاریخچه مخزن از دستور git log با پرچمهای مختلف قالببندی استفاده میشود. این دستور زمانبندی commitها، نویسندگان، تاریخها و شناسههای SHA-1 را نمایش میدهد.
# مشاهده تاریخچه با نمایش گراف شاخهها
git log --oneline --graph --all
# مشاهده تغییرات در یک commit خاص
git show a1b2c3d
# مقایسه وضعیت فعلی با آخرین commit
git diff HEAD
# مشاهده تاریخچه یک فایل خاص
git log --follow src/MainActivity.kt
پرچم --graph یک نمودار ASCII از انشعابات را نمایش میدهد که بهویژه در مخازن با کار فعال در چندین شاخه مفید است. برای پروژههای موبایل با انتشارات مکرر، نمودار بصری به ارزیابی سریع ساختار توسعه کمک میکند.
سؤالات متداول
مخزن — یک انبار فنی کد با تاریخچه تغییرات است. پروژه — مفهوم گستردهتری است که شامل مخزن، سیستم مدیریت وظایف، مستندات و فرآیندهای توسعه میشود. یک پروژه میتواند چندین مخزن داشته باشد.
یک مخزن جدید از طریق رابط وب GitHub با کلیک روی دکمه New ایجاد کنید. نام، توضیحات و سطح دسترسی را مشخص کنید. سپس مخزن را روی رایانه محلی کلون کنید یا یک مخزن محلی موجود را از طریق git remote add origin متصل کنید.
اگر مخزن راه دور از سرور حذف شده باشد، اما حداقل یک توسعهدهنده یک کپی محلی داشته باشد، مخزن قابل بازیابی است. کافی است یک مخزن راه دور جدید ایجاد کرده و git push --force را از کپی محلی با تمام تاریخچه اجرا کنید.
فورک — کپی از مخزن شخص دیگر در حساب شماست. شما یک کپی کامل از تاریخچه دریافت میکنید و میتوانید بدون تأثیر بر نسخه اصلی هر تغییری ایجاد کنید. فورکها برای مشارکت در پروژههای منبعباز از طریق Pull Request استفاده میشوند.
از git gc برای فشردهسازی اشیاء و حذف دادههای غیرقابل دسترس استفاده کنید. فایلهای بزرگ را از تاریخچه از طریق git filter-branch یا git filter-repo حذف کنید. برای پروژههایی با فایلهای باینری، Git LFS (Large File Storage) را در نظر بگیرید.
خلاصه
ما یک اپلیکیشن موبایل به صورت کلید در دست توسعه خواهیم داد
IT Sectr از سال 2017 برنامههای iOS و Android را برای استارتاپها و کسبوکارها ایجاد میکند. ما به شما مشاوره میدهیم و بهترین راهحل را پیشنهاد خواهیم کرد.
همچنین بخوانید