مستندات Game Client - این فایل رو اول از همه بخونید. توش پیدا میکنید:
- معماری کامل پروژه
- قوانین بازی و مکانیک
Recruit/Combat - لیست مینیونها و قابلیتهاشون
- ساختار دادهها و
Event Log - راهنمای انیمیشن و
UI - سناریوهای تست
اگه با Git .آشنا نیستید، نگران نباشید. اینجا یه توضیح مختصر میدم تا بتونید شروع کنید. اگه قبلاً کار کردید، میتونید این بخش رو رد کنید/.
Git یه سیستم کنترل نسخه است که بهتون امکان میده:
- تاریخچه کامل تغییرات رو داشته باشید
- روی بخشهای مختلف پروژه به صورت همزمان کار کنید (با
branch) - با بقیه همکاری کنید بدون اینکه کار همدیگه رو
overwriteکنید - اگه اشتباهی کردید، به نسخه قبلی برگردید
Repository (Repo): یه پوشه که تمام فایلهای پروژه و تاریخچه تغییرات توشه. میتونه local (روی کامپیوتر شما) یا remote (روی GitHub) باشه.
Branch: مثل یه خط زمانی جداگانه. شما میتونید یه branch بسازید، تغییرات بدید، و اگه خوشتون نیومد به branch قبلی برگردید. main معمولاً branch اصلی پروژه است.
Commit: یه snapshot از تغییرات شما در یه نقطه زمانی. هر commit باید یه پیام داشته باشه که میگه چی تغییر دادهاید.
Fork: کپی کردن یه repository به حساب GitHub خودتون. مثل این میمونه که یه پروژه رو دانلود کنید و نسخه خودتون رو داشته باشید.
Pull Request (PR): راهی برای پیشنهاد دادن تغییرات. شما تغییرات رو توی fork یا branch خودتون میدید، بعد PR میسازید تا بقیه ببینن و اگه خوب بود merge بشه.
این دستورات رو یاد بگیرید، خیلی کارتون راه میافته:
git status
# ببینید چی تغییر کرده
# فایلها رو اضافه کنید به staging (آماده commit شدن)
git add filename.py # یه فایل خاص
git add . # همه فایلهای تغییر یافته
# تغییرات رو ثبت کنید
git commit -m "Your message here"
# تاریخچه commit ها رو ببینید
git log
git log --oneline # نسخه کوتاه
# تفاوتها رو ببینید (قبل از commit)
git diff
# بین branch ها جابهجا بشید
git checkout branch-name
# یه branch جدید بسازید و بهش برید
git checkout -b new-branch-name
# لیست branch ها رو ببینید
git branch
# تغییرات رو به GitHub بفرستید
git push origin branch-name
# تغییرات رو از GitHub بگیرید
git pull origin branch-name
# فقط تغییرات رو بگیرید (بدون merge کردن)
git fetch origin
# remote repository ها رو ببینید
git remote -v
# یه remote جدید اضافه کنید
git remote add name https://github.com/...
# یه repository رو clone کنید
git clone https://github.com/...
# دو branch رو با هم merge کنید
git merge branch-nameیه workflow ساده معمولاً این شکله:
- کار کنید: فایلها رو ویرایش کنید
- Add کنید:
git add .- فایلهای تغییر یافته رو آمادهcommitکنید - Commit کنید:
git commit -m "message"- تغییرات رو ثبت کنید - Push کنید:
git push- تغییرات رو بهGitHubبفرستید
نکته مهم قبل از git add .:
قبل از اولین git add .، مطمئن بشید که فایل .gitignore در پروژه وجود داره و شامل موارد زیر است:
venv/
__pycache__/
*.pyc
.vscode/
.idea/
.env
*.log
این کار باعث میشه فایلهای موقت (مثل محیط مجازی پایتون، فایلهای کامپایل شده، و تنظیمات IDE) commit نشن و حجم repository کوچیک بمونه.
مثال عملی:
git status # ببینید چی تغییر کرده
git add . # همه تغییرات رو اضافه کنید
git commit -m "Deimi - Add new feature"
git push origin student-name # تغییرات رو push کنیدقبل از شروع کار هر روز (فقط برای سرگروه):
git fetch upstream # تغییرات جدید رو بگیرید
git checkout main
git merge upstream/main # با repo اصلی sync بشیدنکته: فقط سرگروه باید با upstream sync کند. بقیه اعضا فقط از branch تیمی آپدیت میگیرند.
اگه اشتباهی کردید:
git checkout -- filename.py
# تغییرات یه فایل رو undo کنید (قبل از commit و قبل از staging)
# فایل رو از staging area بیرون بیارید (Unstage کردن)
git reset HEAD filename.py
# حالا میتونید با checkout تغییرات رو دور بریزید:
git checkout -- filename.py
# آخرین commit رو undo کنید (اما تغییرات رو نگه دارید - در حالت Staged)
git reset --soft HEAD~1
# اگر میخواید تغییرات Unstaged بشه (یعنی از حالت Staged بیرون بیاد):
git reset HEAD~1 # یا git reset --mixed HEAD~1 (پیشفرض)Commit های کوچک بهترن: سعی کنید هر commit یه کار واحد انجام بده. بهتره ۱۰ تا commit کوچک داشته باشید تا یه commit بزرگ.
اگه میخواید بیشتر یاد بگیرید، GitHub Guides و Atlassian Git Tutorial منابع خوبی هستن.
قبل از اینکه به جزئیات بریم، اینجا یه خلاصه از workflow کلی میدم تا بفهمید چطوری کار میکنه:
- Fork و Clone:
Repositoryاصلی روforkمیکنید و به کامپیوترcloneمیکنید - Branch شخصی: هر کسی یه
branchشخصی میسازه و توش کار میکنه - Branch تیمی: یکی از تیم
branchتیمی رو میسازه که کدهای نهایی تیم اونجاست - کار روزانه: هر کسی روی
branchشخصی کار میکنه،commitمیکنه،pushمیکنه - Merge به تیم: از طریق
Pull Requestکدهای شخصی رو بهbranchتیمیmergeمیکنید - Sync مداوم: مرتب کدهای
branchتیمی رو میگیرید تا بهروز بمونید - تحویل: فقط
branchتیمی رو تحویل میدید
مهم: هیچوقت مستقیماً به branch تیمی یا main push نکنید. همه چیز از طریق Pull Request انجام میشه.
این دیاگرام نشون میده که چطوری کد بین repository های مختلف جابهجا میشه:
توضیح دیاگرام:
- Upstream Repo (قرمز):
Repositoryاصلی که نگهداری میشه - Origin (آبی):
Forkشخصی شما رویGitHub - Team Repo (سبز):
Repositoryتیمی کهbranchتیمی توشه - Your Local Computer (زرد): کامپیوتر شما که توش کد میزنید
مراحل:
- Fork: از
Upstream RepoبهOrigin(ساختfork) - git push: از
Local ComputerبهOrigin(ارسال تغییرات) - git pull: از
Team RepoبهLocal Computer(syncکردن کدهای تیم) - Pull Request: از
OriginبهTeam Repo(ارسال کد برایmerge) - Get Updates: از
Upstream RepoبهOriginوLocal Computer(همگامسازی باrepositoryاصلی)
اول از همه باید repository اصلی رو fork کنید تا یه کپی ازش توی حساب خودتون داشته باشید.
- به صفحه
repositoryاصلی برید - بالا سمت راست، روی دکمه سبز "Fork" کلیک کنید
- چند ثانیه صبر کنید تا
forkبشه - بعد از
fork، به صفحهrepositoryخودتون منتقل میشید
بعد از fork، URL شما چیزی شبیه این میشه:
https://github.com/YOUR-USERNAME/hearthstone-battlegrounds-1
حالا باید repository رو به کامپیوتر خودتون clone کنید:
cd Desktop # یا هر جای دیگه
# به پوشهای که میخواید پروژه رو توش داشته باشید برید
# Repository خودتون رو clone کنید
git clone https://github.com/YOUR-USERNAME/hearthstone-battlegrounds-1.git
# وارد پوشه پروژه بشید
cd hearthstone-battlegrounds-1Tip: URL رو مستقیماً از صفحه GitHub کپی کنید. توی صفحه repository، دکمه سبز Code رو بزنید و HTTPS URL رو کپی کنید.
برای اینکه بتونید تغییرات repository اصلی رو بگیرید (مثلاً اگه چیزی اضافه کردم)، باید upstream remote رو اضافه کنید:
git remote add upstream https://github.com/ORIGINAL-OWNER/hearthstone-battlegrounds-1.git
# upstream رو اضافه کنید
# بررسی کنید که درست اضافه شده
git remote -vباید دو تا remote ببینید:
origin→repositoryforkشده شماupstream→repositoryاصلی
چرا این کار لازمه؟ چون شما تغییرات repository اصلی رو مستقیم نمیتونید بگیرید، باید از طریق upstream sync کنید.
قبل از شروع هر کار جدید، این کار رو انجام بدید تا کدتون همیشه بهروز باشه:
git fetch upstream
# تغییرات repository اصلی رو بگیرید
# به branch main برید
git checkout main
# تغییرات رو merge کنید
git merge upstream/main
# تغییرات رو به fork خودتون هم push کنید
git push origin mainمهم: این کار رو قبل از شروع کار جدید انجام بدید. اگه این کار رو نکنید و بعد متوجه بشید که repository اصلی تغییر کرده، ممکنه conflict بگیرید و دردسر پیدا کنید.
هر دانشجو باید یه branch شخصی برای خودش بسازه. این branch فقط مال شماست و توش آزادید هر کاری میخواید بکنید.
چرا branch شخصی لازمه؟
- هر کسی میتونه مستقل کار کنه بدون اینکه کار بقیه رو خراب کنه
- میتونید آزادانه
experimentکنید - میتونید
commitهای زیادی داشته باشید بدون نگرانی - فقط وقتی آماده بودید، کدتون رو به
branchتیمیmergeمیکنید
مراحل ساخت:
git checkout main
# 1. اول مطمئن بشید روی main هستید
# 2. repository اصلی رو بهروز کنید (مهم!)
git fetch upstream
git merge upstream/main
# 3. تغییرات رو به fork خودتون push کنید
git push origin main
# 4. حالا branch شخصی خودتون رو بسازید
git checkout -b student-name
# یا با شماره دانشجویی:
git checkout -b 610334567
# 5. branch رو به GitHub push کنید
git push -u origin student-nameنکات مهم:
- نام
branchباید شامل نام یا شماره دانشجویی شما باشه (مثلاًDeimiیا610302000) - همه
pushها باید بهorigin(forkخودتون) بره، نهupstream -uفقط اولین بار لازمه (upstream trackingرو تنظیم میکنه، بعدش فقطgit pushکافیه)- بعد از اینکه
branchرو ساختید، همیشه روی همونbranchکار میکنید
نحوه کار روی branch شخصی:
git branch
# همیشه اول چک کنید روی کدوم branch هستید
# اگه روی branch دیگهای هستید، برگردید به branch شخصی
git checkout student-name
# حالا میتونید کار کنید:
# 1. کد بزنید یا تغییر بدید
# 2. تغییرات رو commit کنید
git add .
git commit -m "Deimi - Add new feature"
git push origin student-nameبعد از اینکه تیمتون رو تشکیل دادید، باید تصمیم بگیرید که branch تیمی روی کدوم fork ساخته بشه. Branch تیمی جاییه که کدهای نهایی تیم جمع میشه.
چرا branch تیمی لازمه؟
- همه کدهای تیم در یه جا جمع میشه
- میتونید ببینید تیم چی کار کرده
- برای تحویل نهایی استفاده میشه
- فقط این
branchرو بررسی میکنم
گزینه ۱: استفاده از Fork یکی از اعضا (پیشنهادی)
سادهترین راه اینه که یکی از اعضای تیم (مثلاً نفر اول) fork خودش رو به عنوان repository تیمی استفاده کنه:
git checkout main
git pull origin main
# نفر اول تیم این کارها رو انجام میده:
# 1. به branch main بره
# 2. branch تیمی رو بسازه
git checkout -b team/robert # نام تیم خودتون رو بذارید
# 3. به GitHub push کنه
git push -u origin team/robertچطوری بقیه اعضا دسترسی داشته باشن:
بعد از اینکه branch تیمی ساخته شد، نفر اول باید بقیه اعضا رو به عنوان Collaborator اضافه کنه:
- به
repositoryتیمی برید (forkنفر اول) - Settings → Collaborators → Add people
usernameبقیه اعضای تیم رو اضافه کنید- اونا باید
inviteرو قبول کنن
بعد از اضافه شدن به عنوان Collaborator:
بقیه اعضا باید remote رو اضافه کنن:
git remote add team-fork https://github.com/TEAM-MEMBER-USERNAME/hearthstone-battlegrounds-1.git
# remote fork تیمی رو اضافه کنید
# بررسی کنید
git remote -v
# حالا میتونید branch تیمی رو ببینید
git fetch team-fork # remote branches رو میگیره
git checkout -b team/robert team-fork/team/robert # branch تیمی رو local میسازهنکته: اینجا fetch لازمه تا remote branches رو ببینیم، بعد میتونیم checkout کنیم. این با pull فرق داره - pull برای گرفتن تغییرات یه branch موجوده، اما اینجا داریم branch جدید رو local میسازیم.
گزینه ۲: ساخت Organization (اختیاری)
اگه میخواید repository جداگانه داشته باشید، میتونید یه Organization بسازید:
- به
GitHubبرید New organizationبسازیدRepositoryتیمی رو تویOrganizationبسازید- همه اعضا رو به
Organizationاضافه کنید
این روش برای تیمهای بزرگتر یا اگه میخواید repository مستقل داشته باشید مفیده.
چند نکته مهم:
- فقط یک نفر از تیم
branchتیمی رو میسازه (معمولاً نفر اول یاTeam Lead) - بقیه اعضا باید
forkخودشون رو داشته باشن - همه اعضا باید به عنوان
Collaboratorاضافه بشن تا بتوننPRبسازن - بعد از ساخت
branchتیمی، همه اعضا بایدremoteرو اضافه کنن (مرحله ۵، گام ۴ رو ببینید)
مسئولیتهای سرگروه (Team Lead):
syncکردنbranchتیمی باrepositoryاصلی (upstream) فقط با سرگروه است- بقیه اعضا فقط از
branchتیمی آپدیت میگیرند - سرگروه در دستورات
Gitباید ازoriginاستفاده کند، نهteam-fork
قبل از شروع کدزنی، تیمتون رو توی README ثبت کنید:
-
فایل تیم رو بسازید:
cp teams/TEAM_TEMPLATE.md teams/robert.md
یا به صورت دستی: از فایل
TEAM_TEMPLATE.mdیک کپی بگیرید و نامش رو بهrobert.mdتغییر بدید. -
فایل رو پر کنید:
- نام تیم
- نام
branchتیمی (team/robert) - شماره دانشجویی همه اعضا
-
توی README یه ردیف به جدول اضافه کنید:
| robert | `team/robert` | 610334567، 610334568، 610334569 | teams/robert.md |
-
Commit و PR بدید:
git checkout student-name git add teams/robert.md README.md git commit -m "Deimi - Register team robert in README" git push origin student-name -
Pull Request بسازید:
- به repository اصلی برید (نه
forkخودتون) - Pull requests → New pull request
- "compare across forks" رو بزنید
- Base:
mainازrepositoryاصلی - Head:
student-nameازforkشما - توضیحات
PRرو بنویسید - Create pull request
- به repository اصلی برید (نه
صبح، قبل از شروع کار:
برای اعضای عادی تیم:
git checkout student-name
# 1. به branch شخصی خودتون برید
# 2. کدهای branch تیمی رو بگیرید (اگه تیم چیزی تغییر داده)
git pull team-fork team/robertبرای سرگروه (Team Lead):
git checkout student-name
# 1. به branch شخصی خودتون برید
# 2. کدهای branch تیمی رو بگیرید (از origin استفاده کنید، نه team-fork)
git pull origin team/robert
# 3. repository اصلی رو بهروز کنید (فقط سرگروه این کار رو میکنه)
git fetch upstream
git checkout main
git merge upstream/main
git checkout student-name
# 4. تغییرات upstream رو به branch تیمی هم sync کنید
git checkout team/robert
git merge upstream/main
git push origin team/robert
git checkout student-nameحین کار:
git checkout student-name
# 1. همیشه روی branch شخصی خودتون کار کنید
# 2. کد بزنید و تغییرات بدید
# ... کد زدن ...
# 3. تغییرات رو commit کنید
git add .
git commit -m "Deimi - Add new feature"
# 4. به GitHub push کنید
git push origin student-nameچند وقت یکبار کدتون رو به branch تیمی merge کنید:
- وقتی یه بخش کامل شد
- وقتی یه
featureآماده شد - وقتی میخواید با تیم
shareکنید - از طریق
Pull Request(مرحله ۵ رو ببینید)
یه مثال کامل از workflow:
git checkout student-name
# 1. صبح: شروع کار
# 2. کدهای تیم رو sync کنید
# نکته: اگر سرگروه هستید (صاحب مخزن تیمی)، به جای team-fork از origin استفاده کنید
git pull team-fork team/robert # یا git pull origin team/robert اگر سرگروه هستید
# 3. کد بزنید
# ... کار میکنید ...
# 4. تغییرات رو commit کنید
git add .
git commit -m "Deimi - Add CardSlot component"
git push origin student-name
# 5. بعد از چند commit، PR بسازید (مرحله ۵)
# 6. بعد از merge، دوباره sync کنید
git checkout team/robert
git pull team-fork team/robert # یا git pull origin team/robert اگر سرگروه هستید
git checkout student-name
git pull team-fork team/robert # یا git pull origin team/robert اگر سرگروه هستیدهمیشه روی branch شخصی کار کنید:
git branch
# قبل از شروع کار، چک کنید
# باید * student-name رو ببینیدCommit های مرتب داشته باشید:
- بعد از هر تغییر کوچک
commitکنید Commit messageهای واضح بنویسیدCommitهای کوچک بهتر ازcommitهای بزرگ
Push مرتب:
- بعد از هر
commitمهم،pushکنید - این کار
backupمحسوب میشه - اگه مشکلی پیش اومد، کدتون روی
GitHubهست
این بخش رو جدی بگیرید. commit message های بد میتونه برای شما و تیمتون دردسرساز بشه.
Last Name - Description of changes
همیشه نام فامیلی خودتون رو اول بذارید (بدون کروشه)، بعد یه خط تیره (-)، بعد توضیحات.
نکته: از کروشه استفاده نکنید. فرمت صحیح: Last Name - Description نه [Last Name] - Description.
درست:
git commit -m "Deimi - Add CardSlot component for displaying cards"
git commit -m "Mohammadi - Fix drag and drop issue in Recruit Screen"
git commit -m "BMO - Implement Triple and Discover system"-
نام فامیلی رو همیشه اول بذارید - اینطوری میتونیم ببینیم هر کسی چی کار کرده
-
توضیحات رو واضح بنویسید:
- خوب:
"Deimi - Implement minion purchase system from shop" - بد:
"Deimi - changes"یا"Deimi - fix"
- خوب:
-
اگه commit شما چند بخش داره، میتونید چند خطی بنویسید:
git commit -m "Deimi - Add CardSlot component - Create CardSlot component for displaying cards - Add hover animation - Fix responsive issue on mobile"
-
Commit های کوچک بهترن: بهتره چند تا
commitکوچک داشته باشید تا یهcommitبزرگ.
# UI Components
git commit -m "Deimi - Create Button component with hover animation"
git commit -m "Deimi - Add LogPanel for displaying event log"
# Game Logic
git commit -m "Mohammadi - Implement minion buy and sell system"
git commit -m "Mohammadi - Add Triple and Golden minion logic"
# Combat System
git commit -m "BMO - Implement attack and damage resolve system"
git commit -m "BMO - Add Deathrattle and Summon logic"
# Server/Backend
git commit -m "Marcus - Create endpoint for minion purchase"
git commit -m "Marcus - Implement WebSocket for combat events"
# Bug Fixes
git commit -m "Hosseini - Fix memory leak in animation system"
git commit -m "Hosseini - Fix index out of range error in board management"
# Documentation
git commit -m "Deimi - Update API documentation"- ردیابی مشارکت: میتونیم ببینیم هر کسی چه کاری انجام داده
- دیباگ: اگه مشکلی پیش اومد، میتونیم ببینیم کدوم
commitمشکل داره - نمرهدهی: برای بررسی مشارکت از
commit historyاستفاده میشه
هشدار جدی: Commit message هایی که این فرمت رو نداشته باشن، توی نمرهدهی تأثیر منفی دارن!
وقتی PR میسازید، توضیحات PR هم باید کامل و واضح باشه. این به reviewer کمک میکنه سریعتر بفهمه چی تغییر دادهاید.
**Changes:**
- [توضیح تغییر ۱]
- [توضیح تغییر ۲]
- [توضیح تغییر ۳]
**Tested:**
- [x] تست ۱ انجام شده
- [x] تست ۲ انجام شده
**Notes:**
- [نکات یا هشدارها]مثال ۱: اضافه کردن کامپوننت
**Changes:**
- Add CardSlot component for displaying cards
- Implement hover and click animations
- Add keyword display (Taunt, Divine Shield, etc.)
**Tested:**
- [x] Component displays correctly in Recruit Screen
- [x] Animations work properly
- [x] Keywords display correctly
**Notes:**
- Card images should be loaded from `assets/minions/`مثال ۲: رفع باگ
**Changes:**
- Fix drag and drop issue that was placing cards in wrong slots
- Improve validation for drop target
**Tested:**
- [x] Drag and drop works correctly
- [x] Error displays if slot is full
- [x] Card moves to correct location
**Notes:**
- This change is backward compatible with previous codeمثال ۳: Merge به branch تیمی
**Changes:**
- Add minion purchase system from shop
- Implement Triple and Golden logic
- Add Discover popup
**Tested:**
- [x] Minion purchase with 3 gold works
- [x] Triple triggers correctly
- [x] Discover popup displays and selection works
**Notes:**
- This PR includes 15 commits, all following correct format
- Requires review before merge- همیشه توضیحات واضح بنویسید - چی تغییر دادید و چرا
- چکلیست تست رو پر کنید - چه چیزهایی رو تست کردید
- اگه
breaking changeهست، حتماً ذکر کنید
وقتی یه بخش کامل شد یا میخواید کدتون رو با تیم share کنید، باید از طریق Pull Request به branch تیمی merge کنید.
اول کدتون رو به fork خودتون push کنید:
git checkout student-name
# مطمئن بشید روی branch شخصی خودتون هستید
# تغییرات رو commit کنید
git add .
git commit -m "Deimi - Add feature description"
git push origin student-nameاگه branch تیمی روی fork یکی از اعضاست:
- به
forkاون عضو برید (repositoryکهbranchتیمی توشه) - Pull requests → New pull request
- "compare across forks" رو بزنید
- تنظیمات:
- Base repository:
forkاون عضو - Base:
team/robert - Head repository:
forkشما - Compare:
student-name
- Base repository:
- توضیحات
PRرو بنویسید (از فرمت بالا استفاده کنید) - Create pull request
اگه branch تیمی روی Organization است:
- به
repositoryتیمی برید - Pull requests → New pull request
- Base:
team/robert - Compare:
forkشما وstudent-name PRرو بسازید
- یکی از اعضای تیم
PRروreviewمیکنه - بعد از تأیید،
mergeمیکنه
نکته: اگه comment گذاشتن، حتماً جواب بدید و اگه نیاز بود تغییرات بدید.
بعد از merge، همه اعضای تیم باید کدهای تیمی رو sync کنن:
git remote add team-fork https://github.com/TEAM-MEMBER-USERNAME/hearthstone-battlegrounds-1.git
# اگه branch تیمی روی fork یکی از اعضاست:
# 1. remote اون fork رو اضافه کنید (اگه قبلاً اضافه نکردید)
# 2. به branch تیمی برید و sync کنید
git checkout team/robert
git pull team-fork team/robert # یا git pull origin team/robert اگر سرگروه هستید
# 3. به branch شخصی برگردید و کدهای تیم رو merge کنید
git checkout student-name
git pull team-fork team/robert # یا git pull origin team/robert اگر سرگروه هستیدTip: این کار رو مرتب انجام بدید (مثلاً هر روز قبل از شروع کار) تا conflict نداشته باشید.
برای جلوگیری از conflict و مشکل، چند نکته:
- قبل از شروع کار روی یه فایل، با تیم هماهنگ کنید - اگه چند نفر همزمان روی یه فایل کار کنن،
conflictمیگیرید - هر کسی روی بخش خاصی کار کنه - مثلاً یکی
UI، یکیLogic، یکیServer - مرتب کدهای branch تیمی رو sync کنید:
نکته مهم: برای sync کردن از git pull استفاده کنید. این دستور خودش fetch و merge رو انجام میده، پس نیازی به اجرای جداگانه نیستن.
git checkout team/robert
# اگه branch تیمی روی fork یکی از اعضاست:
git pull team-fork team/robert # یا git pull origin team/robert اگر سرگروه هستید
git checkout student-name
git pull team-fork team/robert # یا git pull origin team/robert اگر سرگروه هستید
# کدهای تیم رو به branch شخصی خودتون merge کنیدنکته مهم برای سرگروه:
- اگر شما صاحب مخزن تیمی هستید، به جای
team-forkازoriginاستفاده کنید - مسئولیت
syncکردنbranchتیمی باrepositoryاصلی (upstream) فقط با شماست - بقیه اعضا فقط از
branchتیمی آپدیت میگیرند
نکته: اگه conflict گرفتید، نگران نباشید. بخش Troubleshooting رو ببینید.
قبل از تحویل، باید مطمئن بشید که branch تیمی شما کامل، بهروز و آماده تحویله.
اول از همه باید مطمئن بشید که همه کدها به branch تیمی merge شدن:
git checkout team/robert
# به branch تیمی برید
# مطمئن بشید همه تغییرات جدید رو گرفتید
git pull team-fork team/robert # یا git pull origin team/robert اگه branch تیمی روی fork خودتون هست
# بررسی کنید که همه چیز بهروزه
git log --onelineبررسی کنید که همه اعضای تیم commit های معنیدار داشتهان:
git log --oneline --all
# تاریخچه commit ها رو ببینید
# ببینید چه کسایی commit داشتن
git shortlog -snنکته: اگه یکی از اعضای تیم commit نداره یا commit هاش خیلی کمه، با اون صحبت کنید.
قبل از تحویل، حتماً پروژه رو تست کنید:
- پروژه بدون خطای
syntaxاجرا بشه - هیچ خطای
importوجود نداشته باشه - فایلهای موقت و اضافی
commitنشده باشن - همه فایلهای لازم موجود باشن
مطمئن بشید که:
- فایل تیم توی
teams/<team-name>.mdکامل باشه - شماره دانشجویی همه اعضا توی فایل تیم باشه
- جدول تیمها توی
READMEبهروز باشه
بعد از اینکه همه چیز رو بررسی کردید، مطمئن بشید که branch تیمی روی GitHub هم بهروز باشه:
نکته مهم: اگر تمام مراحل قبل را با PR انجام دادهاید، کد شما روی GitHub است. نیازی به push مستقیم نیست و این کار ممکن است با قوانین پروژه (protection rules) تناقض داشته باشد.
- به صفحه
GitHub repositoryتیمی برید برنچتیمی را بررسی کنید- مطمئن بشید که آخرین
commitهای همه اعضای تیم درbranchتیمی موجود است
اطلاعاتی که باید بدید:
- نام branch تیمی: مثلاً
team/robert - Repository:
URLکاملrepositoryکهbranchتیمی توشه- اگه روی
forkیکی از اعضاست:https://github.com/TEAM-MEMBER-USERNAME/hearthstone-battlegrounds-1 - اگه روی
Organizationاست:https://github.com/ORG-NAME/hearthstone-battlegrounds-1
- اگه روی
- اعضای تیم: نام و شماره دانشجویی همه اعضا (برای اطمینان)
مثال:
Branch تیمی: team/robert
Repository: https://github.com/Deimi/hearthstone-battlegrounds-1
اعضا: احمدی (610334567)، محمدی (610334568)، رضایی (610334569)
راه حل:
- مطمئن بشید که به حساب
GitHubخودتونloginکردید - اگه دکمه
Forkرو نمیبینید،repositoryممکنهprivateباشه
راه حل:
git remote -v
# بررسی کنید URL درست باشه
# اگه مشکل دارید، دوباره clone کنید
cd ..
rm -rf hearthstone-battlegrounds-1
git clone https://github.com/YOUR-USERNAME/hearthstone-battlegrounds-1.gitراه حل:
git remote -v
# بررسی کنید upstream اضافه شده
# اگه نیست، اضافه کنید
git remote add upstream https://github.com/ORIGINAL-OWNER/hearthstone-battlegrounds-1.git
# دوباره بررسی کنید
git remote -vراه حل:
- مطمئن بشید کدتون رو به
forkخودتونpushکردید - توی صفحه
PR، "compare across forks" رو بزنید Head repositoryرو بهforkخودتون تغییر بدید
این یکی از شایعترین مشکلاته. نگران نباشید، حلش آسونه:
git checkout student-name
git pull team-fork team/robert
# 1. قبل از merge، همیشه کدهای تیم رو pull کنید
# 2. اگه conflict پیش اومد:
# فایلهای conflict شده رو باز کنید
# علامتهای <<<<<< و >>>>>> رو پیدا کنید
# کد درست رو نگه دارید و بقیه رو حذف کنید
# بعد commit کنید
git add .
git commit -m "Deimi - Resolve merge conflict with team branch"نکته: اگه نمیدونید کدوم درسته، با تیم صحبت کنید. معمولاً باید هر دو بخش رو نگه دارید یا با هم ترکیب کنید.
راه حل:
- شما نباید مستقیماً به
branchتیمیpushکنید - همیشه از طریق
Pull Requestکار کنید - کدتون رو به
branchشخصی خودتونpushکنید و بعدPRبسازید
- هر کسی روی
branchشخصی خودش کار میکنه - کدها از طریق
PRبهbranchتیمیmergeمیشن - برای تحویل فقط
branchتیمی بررسی میشه - Push مستقیم به
mainممنوع است - Push مستقیم به
branchتیمی ممنوع است (فقط از طریقPR)
- قبل از شروع کدزنی، حتماً
docs/Game Client.mdرو کامل بخونید - کدها باید طبق معماری باشه که توی مستندات نوشته شده
- فایلهای موقت و اضافی رو
commitنکنید - عکسهای مورد نیاز اکثراً توی فولدر موجوده
- فقط ردیف تیم خودتون رو توی جدول تغییر بدید
نکته مهم: فقط سرگروه باید با repository اصلی (upstream) sync کند. بقیه اعضا فقط از branch تیمی آپدیت میگیرند.
برای سرگروه:
git fetch upstream && git merge upstream/mainبعد از sync، تغییرات را به branch تیمی هم منتقل کنید و push کنید تا بقیه اعضا بتوانند استفاده کنند.
برای اعضای عادی:
git pull team-fork team/robert # یا git pull origin team/robert اگر سرگروه هستید| نام تیم | برنچ تیمی | اعضا (شماره دانشجویی) | لینک فایل تیم |
|---|---|---|---|
| مثال | team/example |
610334567، 610334568 | teams/example.md |
- مستندات Game Client - حتماً بخونید!
- مستندات Server-Side - در حال تکمیل (Socket Programming)
- مستندات Mock Payloads
- GitHub Issues: بهترین راه برای سوالات تکنیکی. یه
Issueدرrepositoryاصلی باز کنید و سوالتون رو بپرسید. این کار به بقیه هم کمک میکنه اگه سوال مشابهی داشته باشن. - تلگرام: برای سوالات خصوصی یا مهم
- بخش Troubleshooting رو چک کنید - خیلی از مشکلات رایج اونجا جواب داده شدن
- مستندات رو بخونید - جواب خیلی از سوالات توی مستندات
Game Clientهست - سوالتون رو واضح بنویسید - توضیح بدید چه کاری میخواید انجام بدید، چه خطایی میگیرید، و چه کارهایی تا حالا کردید
سوالاتی که میتونید خودتون جوابشون رو پیدا کنید، جواب داده نمیشن:
- "چطوری Git نصب کنم؟" - این رو باید خودتون گوگل کنید
- "چطوری branch بسازم؟" - همه چیز توی این
READMEنوشته شده - "کد من کار نمیکنه" - بدون توضیح بیشتر نمیتونیم کمک کنیم
- "این ارور پایتون یعنی چی؟" - ارورهای رایج (مثل
SyntaxError,IndentationError,NameError) رو کپی کنید و در گوگل سرچ کنید. ۹۹٪ مواقع جواب تو لینک اول هست - "چرا import کار نمیکنه؟" - مطمئن بشید که محیط مجازی (
venv) فعاله و پکیجها نصب شدن
موفق باشید!
