Submodules، مدیریت پیشرفته ریموت و واژهنامه پایانی
گنجاندن مخزن داخل مخزن با submodule، مدیریت پیشرفته ریموتها، بهترین شیوهها و واژهنامه کامل گیت.
Submodule چیست؟
Submodule یعنی یک مخزن گیت داخل مخزن دیگر — مثل کتابخانهای که جداگانه توسعه مییابد اما پروژه شما از آن استفاده میکند. گیت فقط یک اشارهگر به کامیت مشخص از آن مخزن را نگه میدارد.
سناریو
قالب سایتتان یک مخزن جدا دارد و در چند پروژه از آن استفاده میکنید:
# افزودن submodule به پروژه:
git submodule add https://github.com/you/site-theme.git themes/theme
git commit -m "افزودن قالب بهعنوان submodule"
کلون پروژه دارای submodule
# روش ۱: کلون + init همزمان:
git clone --recurse-submodules https://github.com/you/project.git
# روش ۲: کلون عادی، بعد فعالسازی:
git clone https://github.com/you/project.git
cd project
git submodule init
git submodule update
بهروزرسانی submodule
# رفتن به آخرین نسخه همه submoduleها:
git submodule update --remote
نکات submodule
Submoduleها معروف به پیچیدگیاند! قبل از استفاده جدی، خوب تمرین کنید. جایگزینهای سادهتر: پکیجمنیجر (npm، composer) یا monorepo.
مدیریت پیشرفته ریموت
# تغییر نام ریموت:
git remote rename origin github
# آدرس جدید:
git remote set-url origin git@github.com:user/new-repo.git
# ریموت موقت بدون ذخیره (یکبار fetch):
git ls-remote https://github.com/other/repo.git
# حذف:
git remote remove old-origin
# push به چند ریموت همزمان (ترفند):
git remote set-url --add --push origin git@github.com:u/r1.git
git remote set-url --add --push origin git@gitlab.com:u/r2.git
بهترین شیوههای گیت (جمعبندی دوره)
- کامیت کوچک و مکرر — هر تغییر منطقی یک کامیت
- پیامهای گویا — آینده خودتان از شما تشکر میکند
- شاخه برای هر کار — main همیشه سالم
- .gitignore از روز اول — مخصوصاً .env!
- pull قبل از push — تعارض کمتر
- push مرتب — پشتیبان + همکاری
- revert برای عمومی، reset برای محلی
- PR برای بازبینی — حتی تیم دونفره
- امضا برای پروژههای مهم — Verified ✅
- CI برای خودکارسازی — رباتها تست کنند، نه مشتری! 😄
واژهنامه کامل گیت 📖
| اصطلاح | معنی |
|---|---|
| Repository (مخزن) | پوشه پروژه + تاریخچه کامل |
| Commit (کامیت) | عکس فوری از پروژه در یک لحظه |
| Staging Area | ناحیه آمادهسازی تغییرات برای کامیت |
| Branch (شاخه) | خط مستقل توسعه |
| HEAD | اشارهگر «الان کجا هستید» |
| Merge (ادغام) | ترکیب دو شاخه |
| Conflict (تعارض) | تغییر متضاد دو شاخه در یک بخش |
| Remote (ریموت) | نسخه سروری مخزن (گیتهاب...) |
| origin | نام قراردادی ریموت اصلی |
| upstream | مخزن اصلی (در Fork) |
| Clone | کپی کامل مخزن روی سیستم |
| Fork | کپی مخزن زیر اکانت خودتان |
| Pull Request | درخواست ادغام تغییرات شما |
| Fetch | دانلود تغییرات ریموت بدون اعمال |
| Pull | fetch + merge فوری |
| Push | ارسال کامیتها به ریموت |
| Tag (برچسب) | نام دائمی روی کامیت (نسخه) |
| Stash | ذخیره موقت تغییرات نیمهکاره |
| Revert | خنثیسازی با کامیت معکوس |
| Reset | برگرداندن شاخه به گذشته |
| Rebase | بازنویسی کامیتها روی پایه جدید |
| Reflog | تاریخچه مخفی حرکات HEAD |
| Detached HEAD | بودن روی کامیت بدون شاخه |
| Tracking | اتصال شاخه محلی به ریموت |
| .gitignore | لیست فایلهای نادیدهگرفته |
| Hook | اسکریپت خودکار در رویدادها |
| SHA / Hash | شناسه منحصربهفرد هر کامیت |
تبریک! 🎉
شما دوره کامل گیت را تمام کردید — از git init تا Submodule و CI/CD! حالا:
- ✅ یک مخزن شخصی بسازید و هر روز چیزی کامیت کنید
- ✅ پروفایل گیتهابتان را پر کنید — رزومه زنده شماست
- ✅ در یک پروژه متنباز مشارکت کنید (حتی اصلاح مستندات!)
موفق باشید! 🚀
این مبحث بخشی از دوره آموزش کامل Git است.