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

بهترین شیوه‌های گیت (جمع‌بندی دوره)

  1. کامیت کوچک و مکرر — هر تغییر منطقی یک کامیت
  2. پیام‌های گویا — آینده خودتان از شما تشکر می‌کند
  3. شاخه برای هر کار — main همیشه سالم
  4. .gitignore از روز اول — مخصوصاً .env!
  5. pull قبل از push — تعارض کمتر
  6. push مرتب — پشتیبان + همکاری
  7. revert برای عمومی، reset برای محلی
  8. PR برای بازبینی — حتی تیم دونفره
  9. امضا برای پروژه‌های مهم — Verified ✅
  10. CI برای خودکارسازی — ربات‌ها تست کنند، نه مشتری! 😄

واژه‌نامه کامل گیت 📖

اصطلاحمعنی
Repository (مخزن)پوشه پروژه + تاریخچه کامل
Commit (کامیت)عکس فوری از پروژه در یک لحظه
Staging Areaناحیه آماده‌سازی تغییرات برای کامیت
Branch (شاخه)خط مستقل توسعه
HEADاشاره‌گر «الان کجا هستید»
Merge (ادغام)ترکیب دو شاخه
Conflict (تعارض)تغییر متضاد دو شاخه در یک بخش
Remote (ریموت)نسخه سروری مخزن (گیت‌هاب...)
originنام قراردادی ریموت اصلی
upstreamمخزن اصلی (در Fork)
Cloneکپی کامل مخزن روی سیستم
Forkکپی مخزن زیر اکانت خودتان
Pull Requestدرخواست ادغام تغییرات شما
Fetchدانلود تغییرات ریموت بدون اعمال
Pullfetch + merge فوری
Pushارسال کامیت‌ها به ریموت
Tag (برچسب)نام دائمی روی کامیت (نسخه)
Stashذخیره موقت تغییرات نیمه‌کاره
Revertخنثی‌سازی با کامیت معکوس
Resetبرگرداندن شاخه به گذشته
Rebaseبازنویسی کامیت‌ها روی پایه جدید
Reflogتاریخچه مخفی حرکات HEAD
Detached HEADبودن روی کامیت بدون شاخه
Trackingاتصال شاخه محلی به ریموت
.gitignoreلیست فایل‌های نادیده‌گرفته
Hookاسکریپت خودکار در رویدادها
SHA / Hashشناسه منحصربه‌فرد هر کامیت

تبریک! 🎉

شما دوره کامل گیت را تمام کردید — از git init تا Submodule و CI/CD! حالا:

موفق باشید! 🚀

این مبحث بخشی از دوره آموزش کامل Git است.

ابزارهای مرتبط