اگر تا حالا فایلی به اسم config-final-v2-new-REAL.rsc داشتهاید، مشکلی را که گیت حل میکند میشناسید. گیتهاب و گیتلب هم جایی هستند که این تاریخچه را روی اینترنت نگه میدارند و تیم را حولش جمع میکنند. این ابزارها فقط مال برنامهنویسها نیستند؛ مدیر شبکه و تیم فنی هم خیلی از آنها استفاده میکنند.
اول: Git چیست
Git یک نرمافزار کنترل نسخه است که روی کامپیوتر خودتان اجرا میشود. هر بار که تغییری را «ثبت» میکنید (commit)، گیت یک عکس از وضعیت فایلها نگه میدارد. بعداً میتوانید ببینید چه کسی، کی و چه چیزی را عوض کرده، دو نسخه را مقایسه کنید یا به هر نقطهای از گذشته برگردید.
- مخزن (repository): پوشهای که گیت تاریخچهاش را نگه میدارد.
- commit: یک ثبت تغییر، با پیامی که میگوید چه کاری شده.
- شاخه (branch): یک مسیر جدا برای کار روی تغییرات، بدون دست زدن به نسخهٔ اصلی.
- merge: ادغام یک شاخه با شاخهٔ اصلی.
GitHub و GitLab چیست
گیت خودش فقط روی سیستم شماست. GitHub و GitLab سرویسهاییاند که مخزن گیت را روی سرور نگه میدارند و ابزارهای همکاری را به آن اضافه میکنند: بازبینی کد، مدیریت کارها، اجرای خودکار تست و استقرار، و مستندات. یعنی Git موتور است و اینها خودرو و جاده.
مقایسهٔ GitHub و GitLab
| GitHub | GitLab | |
|---|---|---|
| شهرت | بزرگترین جامعهٔ متنباز دنیا | محبوب در شرکتها و تیمهای DevOps |
| درخواست ادغام | Pull Request | Merge Request |
| اجرای خودکار | GitHub Actions | GitLab CI/CD |
| نصب روی سرور خودتان | فقط نسخهٔ سازمانی پولی | نسخهٔ رایگان و متنباز (Community Edition) |
| مناسب برای | پروژههای متنباز، نمونهکار شخصی، همکاری عمومی | کد داخلی شرکت، وقتی میخواهید همهچیز روی سرور خودتان باشد |
گزینههای سبکتر هم هست: Gitea و Forgejo متنباز و بسیار سبکاند و روی یک سرور کوچک با چند صد مگ رم اجرا میشوند؛ برای تیمهای کوچک عالیاند.
نکته برای کاربران ایران
دسترسی و شرایط استفاده از سرویسهای ابری خارجی برای کاربران ایرانی در سالهای مختلف تغییر کرده و ممکن است باز هم تغییر کند. برای کد و دادهای که کسبوکارتان به آن وابسته است، یک نسخهٔ خودمیزبان (GitLab CE، Gitea یا Forgejo روی سرور خودتان) یا دستکم یک نسخهٔ پشتیبان (mirror) روی سرور داخلی نگه دارید.
کاربردها
- نگهداری کد با تاریخچهٔ کامل: هیچ تغییری گم نمیشود و همیشه میشود برگشت.
- همکاری تیمی: هر نفر روی شاخهٔ خودش کار میکند و تغییر از طریق Pull/Merge Request بازبینی و بعد ادغام میشود.
- مدیریت کارها (Issues): گزارش باگ، درخواست امکانات و برد کارها کنار خود کد.
- CI/CD: با هر تغییر، تستها خودکار اجرا میشوند و نسخهٔ جدید روی سرور مستقر میشود.
- مستندات و ویکی: فایل
README.mdو ویکی پروژه، همراه با کد و نسخهدار. - سایت استاتیک رایگان: GitHub Pages و GitLab Pages یک سایت ساده یا مستندات را مستقیم از مخزن منتشر میکنند.
- انتشار نسخه و بسته: فایلهای نصبی (مثل APK اپ)، ایمیج داکر و بستههای نرمافزاری.
- نمونهکار: پروفایل گیتهاب برای برنامهنویس حکم رزومه را دارد.
کاربرد برای مدیران شبکه
- بکاپ نسخهدار کانفیگ روترها: خروجی کانفیگ هر شب در گیت ثبت شود؛ اگر کسی چیزی را عوض کرد، دقیقاً میبینید چه خطی و کی.
- اسکریپتها و پلیبوکها: اسکریپتهای bash، پایتون و Ansible در یک مخزن مشترک، نه پراکنده روی لپتاپها.
- زیرساخت بهصورت کد: فایلهای
docker-compose، تنظیمات Nginx و فایروال با بازبینی قبل از اعمال. - مستندات شبکه: نقشهٔ IPها، روالهای کاری و راهنمای رفع مشکل کنار هم و همیشه بهروز.
شروع در پنج دستور
git config --global user.name "Your Name"
git config --global user.email "you@example.ir"
git init my-project && cd my-project
echo "# My project" > README.md
git add README.md
git commit -m "First commit"
# create an empty repository on GitHub or GitLab, then:
git remote add origin https://gitlab.example.ir/team/my-project.git
git push -u origin mainکارهای روزمره هم همین سه دستور است: git add برای انتخاب تغییرها، git commit برای ثبت و git push برای فرستادن به سرور. برای گرفتن تغییرات بقیه: git pull.
نمونه: بکاپ شبانهٔ کانفیگ میکروتیک در گیت
این اسکریپت روی یک سرور لینوکس هر شب خروجی کانفیگ روترها را با SSH میگیرد، رمزها را میپوشاند و اگر تغییری بود ثبت میکند. احراز هویت SSH با کلید باشد، نه رمز.
#!/bin/sh
# /usr/local/bin/mt-backup.sh - run nightly from cron
cd /srv/router-configs || exit 1
for r in 203.0.113.2 203.0.113.3; do
ssh -o BatchMode=yes backup@"$r" "/export terse" \
| sed -E 's/(secret|password|passphrase)=[^ ]+/\1=***/g' \
| grep -v '^# .* by RouterOS' > "$r.rsc"
done
git add -A
git diff --cached --quiet || git commit -q -m "Config backup $(date +%F)"
git push -q0 2 * * * root /usr/local/bin/mt-backup.shخط اول هر خروجی میکروتیک تاریخ دارد و حذفش کردیم تا اگر کانفیگ واقعاً عوض نشده، commit خالی ساخته نشود.
نکتههای امنیتی
- هیچوقت رمز، توکن یا کلید را commit نکنید. حتی اگر بعداً پاکش کنید، در تاریخچه میماند. از فایل
.envو.gitignoreاستفاده کنید. - مخزنهایی که اطلاعات شبکه یا مشتری دارند را خصوصی (private) نگه دارید.
- ورود دومرحلهای حساب را روشن کنید و برای سرورها از کلید SSH یا توکن با دسترسی محدود استفاده کنید.
- اگر رمزی اشتباهی commit شد، اول همان رمز را عوض کنید؛ پاک کردن از تاریخچه کار دوم است.
# .gitignore
.env
*.key
*.pem
secrets/منابع
- کتاب رایگان Pro Git (مستندات رسمی گیت) git-scm.com/book
- مستندات GitHub docs.github.com
- مستندات GitLab docs.gitlab.com
- Gitea: سرویس گیت سبک و خودمیزبان about.gitea.com