کارگاه گیت

مقدمه و آغاز کار با گیت
در این بخش یاد میگیرید که گیت چیست و چه کاربردی دارد. همچنین شروع کار با گیت را یاد میگیرید.

چرا گیت؟
گیت چیست؟
گیت یک است که به شما امکان مدیریت و ردیابی تغییرات پروژه را میدهد.
مشکلات بدون گیت
- هماهنگی بین چند برنامهنویس سخت است
- بازگشت به نسخههای قبلی مشکل است
- ادغام تغییرات چند نفر دشوار است
- از دست دادن کد در صورت خطا
راهحل گیت
- هر نفر یک نسخه کامل از پروژه روی سیستم خود دارد
- تمام تغییرات در تاریخچه ذخیره میشود
- میتوانید به هر نسخه قبلی برگردید
- تغییرات به راحتی با دیگران هماهنگ میشود
- کار گروهی بدون تداخل انجام میشود
نصب گیت
دانلود و نصب
برای نصب گیت، به صفحه رسمی نصب گیت مراجعه کنید و نسخه مناسب سیستمعامل خود را دانلود کنید.
نصب در سیستمعاملهای مختلف:
- Windows: فایل
exeرا از سایت رسمی دانلود و نصب کنید - macOS: از Homebrew استفاده کنید:
brew install git - Linux: از package manager استفاده کنید:
sudo apt install git
بررسی نصب
پس از نصب، در ترمینال دستور زیر را اجرا کنید تا نسخه نصبشده گیت را ببینید:
git --versionاگر گیت به درستی نصب شده باشد، خروجی مشابه زیر را خواهید دید:
git version 2.52.0تنظیمات اولیه
قبل از شروع کار با گیت، باید نام کاربری و ایمیل خود را تنظیم کنید. این اطلاعات در کامیتها نمایش داده میشوند و برای کار تیمی ضروری است.
از دستور git config --global برای تنظیمات سراسری استفاده میکنیم:
git config --global user.name "نام شما"
git config --global user.email "email@example.com"مشاهده تنظیمات
برای مشاهده تمام تنظیمات گیت خود، از دستور زیر استفاده کنید:
git config --listفعالسازی کلید SSH
کلید SSH برای اتصال امن به سرورهای گیت استفاده میشود. در این بخش مراحل راهاندازی آن را یاد میگیرید.
ایجاد کلید SSH
در ترمینال (یا Git Bash در ویندوز) دستور زیر را اجرا کنید و ۳ بار Enter بزنید:
ssh-keygenاین دستور یک کلید SSH در مسیر ~/.ssh ایجاد میکند.
فعالسازی SSH Agent
eval `ssh-agent`اضافه کردن کلید به SSH Agent
macOS:
ssh-add -K ~/.ssh/id_rsaHost *
UseKeychain yesLinux/Windows:
ssh-add ~/.ssh/id_rsaتنظیم کلید در GitHub
- به تنظیمات SSH Keys در GitHub بروید
- روی "New SSH key" کلیک کنید
- یک عنوان انتخاب کنید
- محتوای
~/.ssh/id_rsa.pubرا در قسمت Key قرار دهید - "Add SSH key" را بزنید
برای تست اتصال به GitHub:
ssh -T git@github.comابزار خط فرمان گیتهاب (GitHub CLI)
علاوه بر دستورات استاندارد گیت، گیتهاب یک ابزار خط فرمان اختصاصی به نام gh دارد که کار با این پلتفرم را بسیار سادهتر میکند. با gh میتوانید بدون خروج از ترمینال، کارهایی مثل ساخت ریپازیتوری، مدیریت Issueها و بررسی Pull Requestها را انجام دهید.
نصب و لاگین
پس از نصب GitHub CLI متناسب با سیستمعامل خود، با دستور زیر به حساب گیتهاب خود متصل شوید:
gh auth loginاین دستور شما را قدمبهقدم برای انتخاب پروتکل (HTTPS یا SSH) و احراز هویت راهنمایی میکند. اگر SSH را انتخاب کنید، gh میتواند به صورت خودکار کلیدهای SSH شما را مدیریت و آپلود کند!
دستورات پرکاربرد
- ساخت ریپازیتوری جدید:
gh repo create my-new-project --public --clone- کلون کردن ریپازیتوری:
gh repo clone owner/repo- مشاهده لیست Issueها:
gh issue list- مشاهده وضعیت Pull Requestها:
gh pr statusریپازیتوری
ریپازیتوری چیست؟ مجموعهای از تاریخچه تمام کامیتهای پروژه از ابتدا تا کنون است. هر ریپازیتوری
شامل نسخه فعلی پروژه و تمام نسخههای قبلی آن میشود.
انواع ریپازیتوری
- : ریپازیتوری روی کامپیوتر شما
- : ریپازیتوری روی سرور (مثل GitHub یا Gitlab)
نحوه کار با ریپازیتوری
در گیت، هر عضو تیم:
- یک کپی کامل از پروژه و تاریخچه آن روی سیستم خود دارد
- میتواند تغییرات را ایجاد و کامیت کند
- تغییرات را به سرور میکند
- تغییرات دیگران را از سرور میکند
مثال ساده
- شما یک فایل
file.txtمیسازید و کامیت میکنید - کامیت را به سرور ارسال میکنید
- همتیمی شما تغییرات را از سرور دریافت میکند
- او فایل را ویرایش میکند و کامیت جدید میسازد
- این روند ادامه مییابد و پروژه پیشرفت میکند
دستورات git init و git clone
git init
برای تبدیل یک پروژه موجود به ریپازیتوری< گیت، از دستور git init استفاده میکنیم:
git init <PATH>این دستور یک ریپازیتوری خالی با فولدر .git ایجاد میکند که تاریخچه تغییرات در آن ذخیره میشود.
git remote add
برای اتصال ریپازیتوری محلی به یک (مثل GitHub یا GitLab)، از دستور زیر استفاده میکنیم:
git remote add <NAME> <REPOSITORY_URL>مثال:
git remote add origin https://github.com/Byte-Magazine/byte-siteمشاهده Remoteها
برای مشاهده لیست remoteهای متصل شده:
git remoteبرای مشاهده URL کامل remoteها:
git remote -vتغییر URL Remote
برای تغییر آدرس یک remote موجود از دستور git remote set-url استفاده میکنیم:
git remote set-url <NAME> <NEW_URL>مثال:
git remote set-url origin https://github.com/username/new-repository.gitgit clone
برای دریافت یک پروژه از سرور و ساخت کپی محلی از آن، از دستور git clone استفاده میکنیم:
git clone <REPOSITORY_URL>مثال:
git clone https://github.com/Byte-Magazine/byte-siteبا نام دلخواه:
git clone https://github.com/Byte-Magazine/byte-site my-test-projectبا SSH:
git clone git@github.com:Byte-Magazine/byte-site.gitچرخه حیات وضعیت فایلها

- Untracked: فایل توسط گیت پیگیری نمیشود
- Unmodified: فایل شناسایی شده و تغییری ندارد
- Modified (not staged): فایل تغییر کرده اما به Staging Area اضافه نشده
- Staged: فایل آماده کامیت است
دستورات add و status
git add
برای اضافه کردن فایلها به Staging Area از دستور git add استفاده میکنیم:
git add <filename>مثال:
git add file.txt
git add file1.txt file2.txtبرای اضافه کردن همه فایلها:
git add .یا
git add -Agit status
برای مشاهده وضعیت فایلها و تغییرات، از دستور git status استفاده میکنیم:
git statusدستور commit
پس از stage کردن فایلها، میتوانیم با دستور git commit یک کامیت ایجاد کنیم:
git commit -m "commit message"روشهای مختلف کامیت
کامیت فایلهای خاص بدون stage کردن:
git commit file.txt -m "change content in file.txt"این دستور فایل را stage و سپس کامیت میکند.
کامیت همه فایلهای tracked:
git commit -a -m "update all tracked files"پرچم -a همه فایلهای tracked را stage و کامیت میکند.
git log
برای مشاهده تاریخچه کامیتها از دستور git log استفاده میکنیم:
git logاین دستور اطلاعات زیر را نمایش میدهد:
- شناسه کامیت (hash)
- کاربر و زمان کامیت
- پیام کامیت
مشاهده تاریخچه یک فایل خاص:
git log file.txtمشاهده تاریخچه یک دایرکتوری:
git log dir1/هش کامیت
هر کامیت یک شناسه یکتا به نام hash دارد که یک رشته 40 کاراکتری (hexadecimal) است. مثال:
a9c30aad7f0d8b39d54ae0f68ba3c9c97a7c3b5cاین هش از محتوای کامیت (فایلها، پیام، تاریخ و ...) محاسبه میشود و برای هر کامیت منحصر به فرد است.
استفاده از hash:
- میتوانید از چند کاراکتر اول hash برای اشاره به کامیت استفاده کنید (معمولاً 7 کاراکتر کافی است)
- برای مشاهده جزئیات یک کامیت خاص:
git show a9c30aدستور tag
از دستور git tag برای علامتگذاری کامیتهای مهم استفاده میشود. معمولاً برای نسخههای منتشر شده (مثل v1.0، v2.1) از tag استفاده میکنیم.
انواع Tag
Lightweight Tag: یک اشارهگر ساده به یک کامیت است و اطلاعات اضافی ندارد:
git tag <TAG_NAME>مثال:
git tag v1.0Annotated Tag: دارای اطلاعات کامل مانند تاریخ، checksum و پیام است. این نوع tag پیشنهاد میشود:
git tag -a <TAG_NAME> -m "<MESSAGE>"مثال:
git tag -a v1.0 -m "Release version 1.0"مشاهده Tagها
مشاهده لیست تمام tagها:
git tagجستجو در tagها با الگو:
git tag -l "v1.*"این دستور تمام tagهایی که با v1. شروع میشوند را نمایش میدهد.
Tag کردن کامیتهای قدیمی
برای tag کردن یک کامیت خاص، hash کامیت را در انتهای دستور اضافه کنید:
git tag -a <TAG_NAME> -m "<MESSAGE>" <COMMIT_HASH>مثال:
git tag -a first -m "First commit tag" 615b64eفایل gitignore.
فایل .gitignore برای نادیده گرفتن فایلها و دایرکتوریهای خاص توسط گیت استفاده میشود. این فایل معمولاً در روت پروژه قرار میگیرد.
موارد استفاده:
- فایلهای تولید شده توسط IDE (مثل VSCode)
- فایلهای مهم پروژه (مثل
.env) - فایلهای تولید شده از build پروژه
ساخت فایل gitignore.
در روت پروژه یک فایل با نام .gitignore بسازید و قوانین دلخواه خود را در آن بنویسید:
file1.txt
/dir1
/dir2/*.cpp
*.envقوانین مهم
آدرسدهی از روت:
/file.txt→ فقط فایل در روت پروژهfile.txt→ فایل در هر جای پروژه
Wildcards:
*→ صفر یا چند کاراکتر (غیر از/)**→ هر تعداد دایرکتوری
مثالها:
*.env
/dir1/file.txt
/dir1/**/file.txt
# don't ignore this file
!/dir1/file.txtمثالهای رایج
برای پروژههای Node.js:
node_modules/
.env
*.log
.DS_Storeبرای پروژههای Python:
__pycache__/
*.pyc
venv/
.env
.DS_Storeبرای پروژههای Java:
*.class
target/
.idea/
.DS_Storeدستورات pull و push و fetch
این دستورات برای همگامسازی پروژه محلی با ریپازیتوری راهدور استفاده میشوند.
git push
برای ارسال تغییرات محلی به سرور از دستور git push استفاده میکنیم:
git push <REPOSITORY> <BRANCH>مثال:
git push origin mainیا به صورت ساده:
git pushgit pull
برای دریافت و اعمال تغییرات از سرور به پروژه محلی از دستور git pull استفاده میکنیم:
git pull <REPOSITORY> <BRANCH>مثال:
git pull origin mainیا به صورت ساده:
git pullاین دستور تغییرات را دریافت کرده و به صورت خودکار با پروژه محلی merge میکند.
git fetch
برای دریافت تغییرات از سرور بدون merge کردن از دستور git fetch استفاده میکنیم:
git fetch <REPOSITORY>مثال:
git fetch originتفاوت pull و fetch
| دستور | کارکرد |
|---|---|
git pull | دریافت + merge خودکار |
git fetch | فقط دریافت (بدون merge) |
مزایای fetch:
- میتوانید قبل از merge، تغییرات را بررسی کنید
- کنترل بیشتری روی merge دارید
- میتوانید تغییرات را در زمان مناسب merge کنید
