แนวทางการขอดึง
เอกสารนี้ให้แนวทางที่ครอบคลุมสำหรับการส่งคำขอดึงไปยังโครงการ XOOPS การปฏิบัติตามหลักเกณฑ์เหล่านี้ทำให้แน่ใจได้ว่าการตรวจสอบโค้ดจะราบรื่นและเวลาในการรวมจะเร็วขึ้น
ก่อนที่จะสร้างคำขอดึง
หัวข้อที่มีชื่อว่า “ก่อนที่จะสร้างคำขอดึง”ขั้นตอนที่ 1: ตรวจสอบปัญหาที่มีอยู่
หัวข้อที่มีชื่อว่า “ขั้นตอนที่ 1: ตรวจสอบปัญหาที่มีอยู่”1. Visit the GitHub repository2. Go to Issues tab3. Search for existing issues related to your change4. Check both open and closed issuesขั้นตอนที่ 2: แยกและโคลนพื้นที่เก็บข้อมูล
หัวข้อที่มีชื่อว่า “ขั้นตอนที่ 2: แยกและโคลนพื้นที่เก็บข้อมูล”# Fork the repository on GitHub# Click "Fork" button on the repository page
# Clone your forkgit clone https://github.com/YOUR_USERNAME/XOOPS.gitcd XOOPS
# Add upstream remotegit remote add upstream https://github.com/XOOPS/XOOPS.git
# Verify remotesgit remote -v# Should show: origin (your fork) and upstream (official)ขั้นตอนที่ 3: สร้างสาขาคุณลักษณะ
หัวข้อที่มีชื่อว่า “ขั้นตอนที่ 3: สร้างสาขาคุณลักษณะ”# Update main branchgit fetch upstreamgit checkout maingit merge upstream/main
# Create feature branch# Use descriptive names: bugfix/issue-number or feature/descriptiongit checkout -b bugfix/123-fix-database-connectiongit checkout -b feature/add-psr-7-supportขั้นตอนที่ 4: ทำการเปลี่ยนแปลงของคุณ
หัวข้อที่มีชื่อว่า “ขั้นตอนที่ 4: ทำการเปลี่ยนแปลงของคุณ”# Make changes to your files# Follow code style guidelines
# Stage changesgit add .
# Commit with clear messagegit commit -m "Fix database connection timeout issue"
# Create multiple commits for logical changesgit commit -m "Add connection retry logic"git commit -m "Improve error messages for debugging"ยอมรับมาตรฐานข้อความ
หัวข้อที่มีชื่อว่า “ยอมรับมาตรฐานข้อความ”ข้อความความมุ่งมั่นที่ดี
หัวข้อที่มีชื่อว่า “ข้อความความมุ่งมั่นที่ดี”ใช้ข้อความที่สื่อความหมายชัดเจนตามรูปแบบเหล่านี้:
# Format<type>: <subject>
<body>
<footer>
# Example 1: Bug fixfix: resolve database connection timeout
Add exponential backoff retry mechanism to database connection.Connections now retry up to 3 times with increasing delays.
Fixes #123# Example 2: Featurefeat: implement PSR-7 HTTP message interfaces
Implement Psr\Http\Message interfaces for request/response handling.Provides type-safe HTTP message handling across the framework.
BREAKING CHANGE: Updated RequestHandler signatureหมวดหมู่ประเภทความมุ่งมั่น
หัวข้อที่มีชื่อว่า “หมวดหมู่ประเภทความมุ่งมั่น”| พิมพ์ | คำอธิบาย | ตัวอย่าง |
|---|---|---|
feat | คุณสมบัติใหม่ | feat: add user dashboard widget |
fix | แก้ไขข้อผิดพลาด | fix: resolve cache invalidation bug |
docs | เอกสารประกอบ | docs: update API reference |
style | รูปแบบโค้ด (ไม่มีการเปลี่ยนแปลงลอจิก) | style: format imports |
refactor | การปรับโครงสร้างโค้ดใหม่ | refactor: simplify service layer |
perf | การปรับปรุงประสิทธิภาพ | perf: optimize database queries |
test | ทดสอบการเปลี่ยนแปลง | test: add integration tests |
chore | การเปลี่ยนแปลงการสร้าง/เครื่องมือ | chore: update dependencies |
ดึงคำอธิบายคำขอ
หัวข้อที่มีชื่อว่า “ดึงคำอธิบายคำขอ”PR เทมเพลต
หัวข้อที่มีชื่อว่า “PR เทมเพลต”markdown## DescriptionClear description of changes made and why.
## Type of Change- [ ] Bug fix- [ ] New feature- [ ] Breaking change- [ ] Documentation update
## Related IssuesCloses #123Related to #456
## Changes Made- Change 1- Change 2- Change 3
## Testing- [ ] Tested locally- [ ] All tests pass- [ ] Added new tests- [ ] Manual testing steps included
## Checklist- [ ] Code follows style guidelines- [ ] Self-review completed- [ ] Comments added for complex logic- [ ] Documentation updated- [ ] No new warnings generated- [ ] Added tests for new functionality- [ ] All tests passingข้อกำหนดด้านคุณภาพรหัส
หัวข้อที่มีชื่อว่า “ข้อกำหนดด้านคุณภาพรหัส”รูปแบบโค้ด
หัวข้อที่มีชื่อว่า “รูปแบบโค้ด”ปฏิบัติตามหลักเกณฑ์สไตล์โค้ด:
<?php// Good: PSR-12 stylenamespace MyModule\Controller;
use MyModule\Model\Item;use MyModule\Repository\ItemRepository;
class ItemController{ private ItemRepository $repository;
public function __construct(ItemRepository $repository) { $this->repository = $repository; }
public function indexAction() { $items = $this->repository->findAll(); return $this->render('items', ['items' => $items]); }}ข้อกำหนดการทดสอบ
หัวข้อที่มีชื่อว่า “ข้อกำหนดการทดสอบ”การทดสอบหน่วย
หัวข้อที่มีชื่อว่า “การทดสอบหน่วย”namespace Tests\Feature;
use PHPUnit\Framework\TestCase;use Xoops\Database\XoopsDatabase;
class DatabaseConnectionTest extends TestCase{ private XoopsDatabase $database;
protected function setUp(): void { $this->database = new XoopsDatabase(); }
public function testConnectionWithValidCredentials() { $result = $this->database->connect(); $this->assertTrue($result); }
public function testConnectionWithInvalidCredentials() { $this->database->setCredentials('invalid', 'invalid'); $result = $this->database->connect(); $this->assertFalse($result); }}การทดสอบการทำงาน
หัวข้อที่มีชื่อว่า “การทดสอบการทำงาน”# Run all testsvendor/bin/phpunit
# Run specific test filevendor/bin/phpunit tests/Feature/DatabaseConnectionTest.php
# Run with coveragevendor/bin/phpunit --coverage-html coverage/ทำงานกับสาขา
หัวข้อที่มีชื่อว่า “ทำงานกับสาขา”อัปเดตสาขาอยู่เสมอ
หัวข้อที่มีชื่อว่า “อัปเดตสาขาอยู่เสมอ”# Fetch latest from upstreamgit fetch upstream
# Rebase on latest maingit rebase upstream/main
# Or merge if you prefergit merge upstream/main
# Force push if rebased (warning: only on your branch!)git push -f origin bugfix/123-fix-database-connectionการสร้างคำขอดึง
หัวข้อที่มีชื่อว่า “การสร้างคำขอดึง”PR รูปแบบชื่อเรื่อง
หัวข้อที่มีชื่อว่า “PR รูปแบบชื่อเรื่อง”[Type] Short description (fix/feature/docs)
Examples:- [FIX] Resolve database connection timeout issue (#123)- [FEATURE] Implement PSR-7 HTTP message interfaces- [DOCS] Update API reference for Criteria classกระบวนการตรวจสอบโค้ด
หัวข้อที่มีชื่อว่า “กระบวนการตรวจสอบโค้ด”สิ่งที่ผู้วิจารณ์มองหา
หัวข้อที่มีชื่อว่า “สิ่งที่ผู้วิจารณ์มองหา”-
ความถูกต้อง
- รหัสช่วยแก้ปัญหาที่ระบุไว้หรือไม่
- Edge case ได้รับการจัดการหรือไม่?
- การจัดการข้อผิดพลาดมีความเหมาะสมหรือไม่?
-
คุณภาพ
- มันเป็นไปตามมาตรฐานการเข้ารหัสหรือไม่?
- สามารถบำรุงรักษาได้หรือไม่?
- ผ่านการทดสอบแล้วดีไหม?
-
ประสิทธิภาพ
- มีการถดถอยด้านประสิทธิภาพหรือไม่?
- แบบสอบถามได้รับการปรับให้เหมาะสมหรือไม่
- การใช้หน่วยความจำสมเหตุสมผลหรือไม่?
-
ความปลอดภัย
- การตรวจสอบอินพุต?
- SQL การป้องกันการฉีด?
- การรับรองความถูกต้อง/การอนุญาต?
การตอบสนองต่อข้อเสนอแนะ
หัวข้อที่มีชื่อว่า “การตอบสนองต่อข้อเสนอแนะ”# Address feedback# Edit files based on review comments
# Commit changesgit commit -m "Address code review feedback
- Add additional error handling- Improve test coverage for edge cases- Update documentation"
# Push changesgit push origin bugfix/123-fix-database-connectionปัญหาและแนวทางแก้ไขทั่วไป PR
หัวข้อที่มีชื่อว่า “ปัญหาและแนวทางแก้ไขทั่วไป PR”ฉบับที่ 1: PR ใหญ่เกินไป
หัวข้อที่มีชื่อว่า “ฉบับที่ 1: PR ใหญ่เกินไป”ปัญหา: ผู้ตรวจสอบไม่สามารถตรวจสอบ PR จำนวนมากได้อย่างมีประสิทธิภาพ
วิธีแก้ปัญหา: แบ่งเป็น PR ขนาดเล็กลง
- PR แรก: การเปลี่ยนแปลงหลัก
- PR ที่สอง: การทดสอบ
- PR ที่สาม: เอกสารประกอบ
ฉบับที่ 2: ไม่รวมการทดสอบ
หัวข้อที่มีชื่อว่า “ฉบับที่ 2: ไม่รวมการทดสอบ”ปัญหา: ผู้ตรวจสอบไม่สามารถยืนยันการทำงานได้
วิธีแก้ไข: เพิ่มการทดสอบที่ครอบคลุมก่อนส่ง
ฉบับที่ 3: ข้อขัดแย้งกับหลัก
หัวข้อที่มีชื่อว่า “ฉบับที่ 3: ข้อขัดแย้งกับหลัก”ปัญหา: สาขาของคุณไม่ซิงค์กับสาขาหลัก
วิธีแก้ไข: Rebase บน main ล่าสุด
git fetch upstreamgit rebase upstream/maingit push -f origin your-branchหลังจากรวมเข้าด้วยกัน
หัวข้อที่มีชื่อว่า “หลังจากรวมเข้าด้วยกัน”ทำความสะอาด
หัวข้อที่มีชื่อว่า “ทำความสะอาด”# Switch to maingit checkout main
# Update maingit pull upstream main
# Delete local branchgit branch -d bugfix/123-fix-database-connection
# Delete remote branchgit push origin --delete bugfix/123-fix-database-connectionสรุปแนวทางปฏิบัติที่ดีที่สุด
หัวข้อที่มีชื่อว่า “สรุปแนวทางปฏิบัติที่ดีที่สุด”สิ่งที่ควรทำ
หัวข้อที่มีชื่อว่า “สิ่งที่ควรทำ”- สร้างข้อความยืนยันเชิงอธิบาย
- จัดทำ PR ที่เน้นจุดประสงค์เดียว
- รวมการทดสอบฟังก์ชันการทำงานใหม่
- อัปเดตเอกสาร
- อ้างอิงประเด็นที่เกี่ยวข้อง
- เก็บคำอธิบาย PR ให้ชัดเจน
- ตอบกลับบทวิจารณ์ทันที
สิ่งที่ไม่ควรทำ
หัวข้อที่มีชื่อว่า “สิ่งที่ไม่ควรทำ”- รวมการเปลี่ยนแปลงที่ไม่เกี่ยวข้อง
- รวม main เข้ากับสาขาของคุณ (ใช้ rebase)
- บังคับผลักดันหลังจากเริ่มการตรวจสอบ
- ข้ามการทดสอบ
- ส่งงานระหว่างดำเนินการ
- ละเว้นความคิดเห็นเกี่ยวกับการตรวจสอบโค้ด
เอกสารที่เกี่ยวข้อง
หัวข้อที่มีชื่อว่า “เอกสารที่เกี่ยวข้อง”- ../การมีส่วนร่วม - ภาพรวมการมีส่วนร่วม
- Code-Style - แนวทางสไตล์โค้ด
- ../../03-Module-Development/Best-Practices/Testing - การทดสอบแนวทางปฏิบัติที่ดีที่สุด
- ../Architecture-Decisions/ADR-Index - แนวปฏิบัติทางสถาปัตยกรรม
แหล่งข้อมูล
หัวข้อที่มีชื่อว่า “แหล่งข้อมูล”อัปเดตล่าสุด: 31-01-2026 ใช้กับ: โครงการ XOOPS ทั้งหมด พื้นที่เก็บข้อมูล: https://github.com/XOOPS/XOOPS