🚀 คู่มือการใช้งาน GitHub
บทที่ 1: รู้จัก GitHub และการเริ่มต้นใช้งาน
📋 เนื้อหาในบทนี้:
- GitHub คืออะไร และทำไมต้องใช้
- การสมัครสมาชิกและตั้งค่าบัญชี
- ความแตกต่างระหว่าง Git และ GitHub
- การสร้าง Repository แรก
- การใช้งานพื้นฐานผ่าน Web Interface
🤔 GitHub คืออะไร?
GitHub เป็นแพลตฟอร์มการพัฒนาซอฟต์แวร์แบบ collaborative ที่ใช้ระบบ Git สำหรับการควบคุมเวอร์ชัน (Version Control) ซึ่งช่วยให้นักพัฒนาสามารถ:
- 📁 เก็บโค้ด - จัดเก็บและจัดการซอร์สโค้ดของโปรเจกต์
- 👥 ทำงานร่วมกัน - หลายคนทำงานในโปรเจกต์เดียวกันได้
- 📜 ติดตามการเปลี่ยนแปลง - ดูประวัติการแก้ไขโค้ดทั้งหมด
- 🔄 จัดการเวอร์ชัน - สร้างและจัดการเวอร์ชันต่างๆ ของโปรเจกต์
- 🐛 รายงานปัญหา - ติดตาม bugs และ feature requests
🆚 ความแตกต่างระหว่าง Git และ GitHub
Git:
- เป็น ระบบควบคุมเวอร์ชัน (Version Control System)
- ทำงานบน command line หรือผ่าน GUI tools
- จัดเก็บข้อมูลใน local computer
- เป็น open source และใช้งานฟรี
GitHub:
- เป็น cloud platform ที่ใช้ Git
- มี web interface ที่ใช้งานง่าย
- เก็บโค้ดใน cloud (remote repository)
- มีฟีเจอร์เพิ่มเติม เช่น Issues, Pull Requests, Actions
📝 การสมัครสมาชิก GitHub
ขั้นตอนการสมัคร:
- เข้าไปที่ https://github.com
- คลิก "Sign up" มุมขวาบน
- กรอกข้อมูล:
- Username - ชื่อผู้ใช้ (จะเป็นส่วนหนึ่งของ URL)
- Email - อีเมลสำหรับการติดต่อ
- Password - รหัสผ่าน (ควรมีความปลอดภัยสูง)
- ยืนยันตัวตนผ่าน puzzle หรือ verification
- เลือกแพลน "Free" (เพียงพอสำหรับการเรียนรู้)
- ยืนยันอีเมลจาก GitHub
💡 เทิปการเลือก Username:
- ใช้ชื่อที่เป็นมืออาชีพ (เหมาะสำหรับการสมัครงาน)
- หลีกเลี่ยงตัวอักษรพิเศษที่อ่านยาก
- ควรสั้นและจำง่าย
- ตรวจสอบว่าชื่อนั้นยังใช้ได้อยู่
🎛️ การตั้งค่าโปรไฟล์เบื้องต้น
ขั้นตอนการตั้งค่า:
- คลิกที่รูปโปรไฟล์ (มุมขวาบน) → "Settings"
- ในส่วน "Public profile":
- เพิ่ม Name - ชื่อจริงของคุณ
- เพิ่ม Bio - แนะนำตัวสั้นๆ
- เพิ่ม Location - ที่อยู่ (ถ้าต้องการ)
- เพิ่ม Website - เว็บไซต์ส่วนตัว (ถ้ามี)
- อัปโหลด รูปโปรไฟล์
📚 Repository คืออะไร?
Repository (หรือเรียกสั้นๆ ว่า "repo") คือ โฟลเดอร์เก็บโปรเจกต์ ที่ประกอบด้วย:
- 📁 Source code - ไฟล์โค้ดทั้งหมด
- 📋 README.md - คำอธิบายโปรเจกต์
- ⚖️ License - สิทธิ์การใช้งาน
- 📜 History - ประวัติการเปลี่ยนแปลง
- 🌿 Branches - เวอร์ชันต่างๆ ของโค้ด
🚀 การสร้าง Repository แรก
วิธีสร้าง Repository:
- ในหน้าหลัก GitHub คลิก "New repository" (ปุ่มเขียว) หรือ "+" มุมขวาบน
- กรอกข้อมูล Repository:
Repository name: my-first-repo
Description: โปรเจกต์แรกของฉัน
☑️ Public (ทุกคนเห็นได้)
☐ Private (เฉพาะคุณและคนที่ได้รับอนุญาต)
☑️ Add a README file
☑️ Add .gitignore (เลือกตาม programming language)
☑️ Choose a license (แนะนำ MIT License)
- คลิก "Create repository"
🎉 ยินดีด้วย! คุณได้สร้าง Repository แรกแล้ว! ตอนนี้คุณจะเห็นหน้า Repository ที่มี:
- ไฟล์ README.md
- ไฟล์ .gitignore
- ไฟล์ LICENSE
🖱️ การใช้งานพื้นฐานผ่าน Web Interface
การสร้างไฟล์ใหม่:
- คลิก "Add file" → "Create new file"
- ตั้งชื่อไฟล์ เช่น hello.txt
- เพิ่มเนื้อหาในไฟล์
- เลื่อนลงไปด้านล่าง ในส่วน "Commit new file"
- เขียน commit message เช่น "เพิ่มไฟล์ hello.txt"
- คลิก "Commit new file"
การแก้ไขไฟล์:
- คลิกที่ชื่อไฟล์ที่ต้องการแก้ไข
- คลิกไอคอน ✏️ (Edit)
- แก้ไขเนื้อหาไฟล์
- เลื่อนลงไปด้านล่าง เขียน commit message
- คลิก "Commit changes"
การอัปโหลดไฟล์:
- คลิก "Add file" → "Upload files"
- ลากไฟล์มาวาง หรือคลิก "choose your files"
- เขียน commit message
- คลิก "Commit changes"
📖 README.md คืออะไร?
README.md เป็นไฟล์ที่สำคัญที่สุดในทุก Repository เพราะ:
- 📖 อธิบายโปรเจกต์ - บอกว่าโปรเจกต์ทำอะไร
- 🔧 วิธีการติดตั้ง - แนะนำขั้นตอนการใช้งาน
- 📚 คู่มือการใช้งาน - ตัวอย่างการใช้งาน
- 👥 ข้อมูลผู้พัฒนา - ติดต่อผู้พัฒนา
- ⚖️ ข้อมูลลิขสิทธิ์ - สิทธิ์การใช้งาน
# ตัวอย่าง README.md พื้นฐาน
## โปรเจกต์นี้คืออะไร?
เว็บไซต์แสดงข้อมูลสภาพอากาศ
## วิธีการใช้งาน
1. เปิดไฟล์ index.html
2. ใส่ชื่อเมืองที่ต้องการ
3. กดปุ่มค้นหา
## เทคโนโลยีที่ใช้
- HTML
- CSS
- JavaScript
## ติดต่อผู้พัฒนา
- Email: example@email.com
- GitHub: @username
🎯 สิ่งที่คุณได้เรียนรู้ในบทนี้
- ✅ เข้าใจว่า GitHub คืออะไรและใช้ทำอะไร
- ✅ รู้ความแตกต่างระหว่าง Git และ GitHub
- ✅ สมัครสมาชิกและตั้งค่าโปรไฟล์
- ✅ สร้าง Repository แรก
- ✅ ใช้งานพื้นฐานผ่าน Web Interface
- ✅ เข้าใจความสำคัญของ README.md
⚡ บทที่ 2: Git Commands พื้นฐานและการทำงานกับ Local Repository
📋 เนื้อหาในบทนี้:
- การติดตั้ง Git บนคอมพิวเตอร์
- Git Commands ที่จำเป็น
- การ clone repository จาก GitHub
- การทำงานกับ branches
- การ commit และ push changes
- การแก้ปัญหาเบื้องต้น
💻 การติดตั้ง Git
สำหรับ Windows:
- ดาวน์โหลดจาก git-scm.com
- รันไฟล์ installer และทำตาม wizard
- เลือก "Use Git from the Windows Command Prompt"
- เลือก "Checkout Windows-style, commit Unix-style line endings"
- คลิก Install และรอจนเสร็จ
สำหรับ macOS:
# ใช้ Homebrew (แนะนำ)
brew install git
# หรือดาวน์โหลดจาก git-scm.com
สำหรับ Linux (Ubuntu/Debian):
sudo apt update
sudo apt install git
ตรวจสอบการติดตั้ง:
git --version
# Output: git version 2.x.x
⚙️ การตั้งค่า Git เบื้องต้น
หลังจากติดตั้งแล้ว ต้องตั้งค่าข้อมูลส่วนตัว:
# ตั้งชื่อผู้ใช้ (ใช้ชื่อจริง)
git config --global user.name "Your Name"
# ตั้งอีเมล (ใช้อีเมลเดียวกับ GitHub)
git config --global user.email "your.email@example.com"
# ตั้งค่า default editor (ถ้าต้องการ)
git config --global core.editor "code --wait" # สำหรับ VS Code
# ดูการตั้งค่าทั้งหมด
git config --list
⚠️ สำคัญ! อีเมลที่ใช้ต้องตรงกับอีเมลใน GitHub account ไม่เช่นนั้น commits จะไม่แสดงในโปรไฟล์ของคุณ
📥 การ Clone Repository
Clone คือการดาวน์โหลด repository จาก GitHub มายังเครื่องของเรา
ขั้นตอนการ Clone:
- ไปที่ repository บน GitHub
- คลิกปุ่ม "Code" (สีเขียว)
- คัดลอก URL (ในส่วน HTTPS)
- เปิด Terminal/Command Prompt
- ไปยังโฟลเดอร์ที่ต้องการ:
# เปลี่ยนไดเรกทอรี
cd Desktop
# Clone repository
git clone https://github.com/username/repository-name.git
# เข้าไปในโฟลเดอร์โปรเจกต์
cd repository-name
# ดูสถานะปัจจุบัน
git status
🌿 การทำงานกับ Branches
Branch คืออะไร?
Branch เป็นเหมือน "เส้นทางแยก" ของโค้ด ที่ให้เราสามารถ:
- 🧪 ทดลองฟีเจอร์ใหม่ โดยไม่กระทบโค้ดหลัก
- 👥 ทำงานหลายคนพร้อมกัน โดยไม่ชนกัน
- 🔄 สลับไปมา ระหว่างเวอร์ชันต่างๆ
- 🔒 ป้องกันโค้ดหลัก จากการเปลี่ยนแปลงที่อาจมีปัญหา
# ดู branches ทั้งหมด
git branch
# ดู branches ทั้งหมด (รวม remote)
git branch -a
# สร้าง branch ใหม่
git branch feature-new-button
# สลับไป branch อื่น
git checkout feature-new-button
# สร้างและสลับไปในคำสั่งเดียว
git checkout -b feature-contact-form
# สลับกลับไป main branch
git checkout main
# ลบ branch (ต้องไม่อยู่ใน branch นั้น)
git branch -d feature-old-feature
💾 การ Commit Changes
Git Workflow พื้นฐาน:
- Working Directory - ไฟล์ที่เรากำลังแก้ไข
- Staging Area - ไฟล์ที่เตรียมจะ commit
- Repository - ไฟล์ที่ commit แล้ว
# 1. ดูสถานะไฟล์
git status
# 2. เพิ่มไฟล์เข้า staging area
git add filename.txt # เพิ่มไฟล์เดียว
git add . # เพิ่มไฟล์ทั้งหมด
git add *.html # เพิ่มไฟล์ html ทั้งหมด
# 3. ดูว่าเพิ่มอะไรเข้าไปแล้วบ้าง
git status
# 4. Commit พร้อม message
git commit -m "เพิ่มฟีเจอร์ login form"
# หรือ add และ commit ในคำสั่งเดียว
git commit -am "แก้ไข bug ในหน้า contact"
การเขียน Commit Message ที่ดี:
✅ ตัวอย่างที่ดี:
- "เพิ่มฟีเจอร์ search bar ในหน้าหลัก"
- "แก้ไข bug responsive บน mobile"
- "อัปเดต README พร้อมคำแนะนำใหม่"
- "ลบโค้ดที่ไม่ใช้แล้วใน utils.js"
❌ ตัวอย่างที่ไม่ดี:
- "อัปเดต"
- "แก้ไข"
- "test"
- "asdfjkl;"
📤 การ Push ไปยัง GitHub
หลังจาก commit แล้ว เราต้อง push เพื่อส่งการเปลี่ยนแปลงไปยัง GitHub:
# Push ไปยัง GitHub
git push origin main
# หรือถ้าอยู่ใน branch อื่น
git push origin branch-name
# สำหรับ push ครั้งแรกใน branch ใหม่
git push -u origin new-branch
📥 การ Pull และ Fetch
# ดาวน์โหลดการเปลี่ยนแปลงจาก GitHub
git pull origin main
# ตรวจสอบการเปลี่ยนแปลงโดยไม่ merge
git fetch origin
# ดู commits ใหม่ที่ยังไม่ merge
git log HEAD..origin/main --oneline
🔍 Git Commands ที่ใช้บ่อย
# ดูประวัติ commits
git log # แสดงรายละเอียดเต็ม
git log --oneline # แสดงแบบสั้น
git log --graph # แสดงเป็นกราฟ
# ดูความแตกต่างของไฟล์
git diff # เปรียบเทียบ working vs staged
git diff --staged # เปรียบเทียบ staged vs committed
git diff HEAD~1 # เปรียบเทียบกับ commit ก่อนหน้า
# ยกเลิกการเปลี่ยนแปลง
git checkout -- filename.txt # ยกเลิกการแก้ไขไฟล์
git reset HEAD filename.txt # เอาไฟล์ออกจาก staging
git reset --hard HEAD # ยกเลิกทุกอย่าง กลับไปสถานะเดิม
# ดูข้อมูล remote repository
git remote -v # ดู URL ของ remote
git remote show origin # ดูข้อมูลละเอียดของ origin
🚨 การแก้ปัญหาเบื้องต้น
ปัญหา: Push ไม่ได้ (rejected)
# แก้ไขโดย pull ก่อน แล้วค่อย push
git pull origin main
git push origin main
ปัญหา: แก้ไขผิดไฟล์แล้ว
# ยกเลิกการแก้ไข (ยังไม่ commit)
git checkout -- filename.txt
# ยกเลิก commit ล่าสุด (แต่เก็บการเปลี่ยนแปลง)
git reset --soft HEAD~1
# ยกเลิก commit ล่าสุดและการเปลี่ยนแปลง
git reset --hard HEAD~1
ปัญหา: ลืม commit message
# แก้ไข commit message ล่าสุด
git commit --amend -m "ข้อความใหม่"
🎯 แบบฝึกหัด: ลองทำเอง!
📝 Challenge 1: การทำงานพื้นฐาน
- Clone repository ที่คุณสร้างในบทที่ 1
- สร้างไฟล์ style.css เพิ่ม CSS พื้นฐาน
- แก้ไขไฟล์ README.md เพิ่มข้อมูล
- Add, commit, และ push การเปลี่ยนแปลง
- ตรวจสอบผลลัพธ์บน GitHub
🌟 Challenge 2: การทำงานกับ Branch
- สร้าง branch ใหม่ชื่อ "add-contact-page"
- สร้างไฟล์ contact.html
- Commit การเปลี่ยนแปลงใน branch นี้
- Push branch ไปยัง GitHub
- สลับกลับไป main branch
🎯 สิ่งที่คุณได้เรียนรู้ในบทนี้
- ✅ ติดตั้งและตั้งค่า Git
- ✅ Clone repository จาก GitHub
- ✅ ทำงานกับ branches
- ✅ Commit และ push การเปลี่ยนแปลง
- ✅ ใช้ Git commands พื้นฐาน
- ✅ แก้ปัญหาเบื้องต้น
🤝 บทที่ 3: การทำงานร่วมกันและ Pull Requests
📋 เนื้อหาในบทนี้:
- การทำงานร่วมกันใน GitHub
- Fork และ Clone repositories
- การสร้างและจัดการ Pull Requests
- Code Review process
- การจัดการ Issues และ Projects
- GitHub Flow workflow
🍴 การ Fork Repository
Fork คือการคัดลอก repository ของคนอื่นมาไว้ในบัญชีของเรา เพื่อที่เราจะได้แก้ไขโดยไม่กระทบต้นฉบับ
ขั้นตอนการ Fork:
- ไปที่ repository ที่ต้องการ fork
- คลิกปุ่ม "Fork" ที่มุมขวาบน
- เลือก account ที่จะ fork ไป (ถ้ามีหลาย account)
- รอสักครู่ GitHub จะสร้าง copy ใหม่ให้
- ตอนนี้คุณจะมี repository ของคุณเองแล้ว!
🔄 Fork vs Clone ต่างกันอย่างไร?
- Fork: คัดลอก repo ไปยังบัญชี GitHub ของเรา
- Clone: ดาวน์โหลด repo มาเก็บในเครื่องของเรา
- ปกติ: Fork ก่อน แล้วค่อย Clone repo ที่ fork มา
🔗 การจัดการ Remote Repositories
เมื่อเรา fork แล้ว เราจะมี remote repositories 2 ตัว:
# ดู remote repositories ปัจจุบัน
git remote -v
# เพิ่ม upstream (repository ต้นฉบับ)
git remote add upstream https://github.com/original-owner/repo-name.git
# ตรวจสอบ remote ทั้งหมด
git remote -v
# origin https://github.com/your-username/repo-name.git (fetch)
# origin https://github.com/your-username/repo-name.git (push)
# upstream https://github.com/original-owner/repo-name.git (fetch)
# upstream https://github.com/original-owner/repo-name.git (push)
การ Sync กับ Upstream:
# ดึงการเปลี่ยนแปลงจาก upstream
git fetch upstream
# เปลี่ยนไปยัง main branch
git checkout main
# merge การเปลี่ยนแปลงจาก upstream
git merge upstream/main
# push การอัปเดตไปยัง fork ของเรา
git push origin main
🚀 การสร้าง Pull Request
Pull Request (PR) คือการขอให้เจ้าของ repository ต้นฉบับ "ดึง" การเปลี่ยนแปลงของเรามารวมเข้าไป
ขั้นตอนการสร้าง Pull Request:
- สร้าง branch ใหม่:
git checkout -b feature/add-dark-mode
- ทำการแก้ไขโค้ด
- Commit การเปลี่ยนแปลง:
git add .
git commit -m "เพิ่มฟีเจอร์ dark mode สำหรับหน้าหลัก"
- Push ไปยัง fork:
git push origin feature/add-dark-mode
- สร้าง PR บน GitHub:
- ไปที่ repository ต้นฉบับ
- จะเห็นแบนเนอร์ "Compare & pull request"
- คลิกปุ่มนั้น หรือไปที่แท็บ "Pull requests"
✍️ การเขียน Pull Request ที่ดี
🎯 ส่วนประกอบของ PR ที่ดี:
**Title:** เพิ่มฟีเจอร์ dark mode สำหรับหน้าหลัก
**Description:**
## 📝 สิ่งที่เปลี่ยนแปลง
- เพิ่ม toggle button สำหรับเปลี่ยน dark/light mode
- อัปเดต CSS variables สำหรับสีใหม่
- เพิ่ม localStorage เพื่อจำค่าที่ผู้ใช้เลือก
## 🧪 วิธีการทดสอบ
1. เปิดเว็บไซต์
2. คลิกปุ่ม dark mode toggle ที่มุมขวาบน
3. refresh หน้า ควรจำค่าเดิมได้
## 📷 Screenshots
(แนบภาพหน้าจอ before/after)
## ✅ Checklist
- [x] ทดสอบใน Chrome, Firefox, Safari
- [x] ใช้งานได้บน mobile
- [x] ไม่มี console errors
- [ ] เขียน tests (จะทำในอนาคต)
🏷️ การใช้ Labels และ Assignees:
- Labels: feature, bug, documentation, good first issue
- Assignees: ระบุคนที่รับผิดชอบ
- Reviewers: คนที่ขอให้ review โค้ด
- Milestone: เชื่อมโยงกับ version หรือ release
👀 Code Review Process
Code Review คือการตรวจสอบโค้ดก่อนที่จะ merge เพื่อให้มั่นใจในคุณภาพ
สำหรับ Reviewer:
- คลิกเข้าไปที่ PR
- ไปที่แท็บ "Files changed"
- ดูโค้ดทีละบรรทัด อ่านความเปลี่ยนแปลง
- คลิกที่บรรทัดที่ต้องการ comment
- เขียน feedback แล้วคลิก "Start a review"
- เมื่อดูครบแล้วให้ "Submit review" พร้อมเลือก:
- Approve: โค้ดดี พร้อม merge
- Request changes: ต้องแก้ไขก่อน
- Comment: แค่แสดงความเห็น
การให้ Feedback ที่สร้างสรรค์:
✅ ตัวอย่างที่ดี:
- "ฟังก์ชันนี้ดูดี แต่อาจจะเพิ่ม error handling จะดีมากครับ"
- "CSS นี้ใช้ได้ดี แต่ลอง extract เป็น variable จะ reusable มากกว่านะ"
- "ตรงนี้อาจจะใช้ map() แทน forEach() จะ functional กว่า"
❌ หลีกเลี่ยง:
- "โค้ดแย่"
- "ผิดหมด"
- "ไม่เข้าใจว่าคิดอะไร"
🐛 การจัดการ Issues
Issues เป็นระบบติดตามปัญหา ข้อเสนอแนะ และงานที่ต้องทำ
วิธีสร้าง Issue:
- ไปที่แท็บ "Issues"
- คลิก "New issue"
- เลือก template (ถ้ามี) หรือใช้ blank
- เขียนหัวข้อและรายละเอียด
- เพิ่ม labels และ assign คน
- คลิก "Submit new issue"
ประเภทของ Issues:
- 🐛 Bug Report: รายงานข้อผิดพลาด
- ✨ Feature Request: ขอฟีเจอร์ใหม่
- 📖 Documentation: ปรับปรุงเอกสาร
- ❓ Question: ถามเกี่ยวกับการใช้งาน
- 🧹 Maintenance: การดูแลรักษาโค้ด
**Bug Report Template:**
## 🐛 อธิบายปัญหา
อธิบายปัญหาที่เจอแบบชัดเจน
## 🔄 ขั้นตอนการทำซ้ำ
1. ไปที่ '...'
2. คลิกที่ '....'
3. scroll ลงไปที่ '....'
4. เกิด error
## 🎯 ผลลัพธ์ที่คาดหวัง
อธิบายว่าคาดหวังให้เกิดอะไร
## 📱 สภาพแวดล้อม
- OS: Windows 10
- Browser: Chrome 96
- Version: 2.1.0
📋 GitHub Projects
Projects เป็นเครื่องมือจัดการงานแบบ Kanban board
การสร้าง Project:
- ไปที่แท็บ "Projects"
- คลิก "New project"
- เลือก template หรือ "Start from scratch"
- ตั้งชื่อโปรเจกต์
- เพิ่ม columns เช่น:
- 📋 To Do: งานที่รอทำ
- 🔄 In Progress: งานที่กำลังทำ
- 👀 Review: รอการตรวจสอบ
- ✅ Done: งานที่เสร็จแล้ว
🔄 GitHub Flow Workflow
GitHub Flow เป็น workflow ที่เรียบง่ายและได้รับการยอมรับอย่างแพร่หลาย
ขั้นตอน GitHub Flow:
- 🌿 Create a branch จาก main
git checkout -b feature/new-header
- ✏️ Add commits ทำการเปลี่ยนแปลงและ commit
- 🚀 Open a Pull Request เพื่อขอ review
- 💬 Discuss and review พูดคุยและปรับปรุงโค้ด
- ✅ Merge เมื่อทุกคนเห็นชอบ
- 🗑️ Delete branch ลบ branch ที่ merge แล้ว
💡 Best Practices:
- Branch names: ใช้ prefix เช่น feature/, bugfix/, hotfix/
- Small PRs: แบ่งการเปลี่ยนแปลงเป็นชิ้นเล็กๆ
- Clear descriptions: อธิบายว่าทำอะไรและทำไม
- Test before merge: ทดสอบให้แน่ใจก่อน
- Review thoroughly: review โค้ดอย่างละเอียด
🛠️ GitHub Desktop (ตัวเลือก)
สำหรับคนที่ไม่ถนัด command line สามารถใช้ GitHub Desktop ได้
ฟีเจอร์ของ GitHub Desktop:
- 🖱️ GUI Interface: ไม่ต้องใช้ command line
- 👀 Visual diff: เห็นการเปลี่ยนแปลงแบบภาพ
- 🌿 Branch management: สร้างและสลับ branch ง่าย
- 📝 Commit history: ดูประวัติแบบกราฟิก
- 🔄 Sync with GitHub: push/pull อัตโนมัติ
🎯 แบบฝึกหัด: Collaborative Project
📝 Challenge 3: การทำงานร่วมกัน
- หา repository open source ง่ายๆ หรือสร้างขึ้นมาเอง
- Fork repository นั้น
- Clone มายังเครื่องของคุณ
- สร้าง branch ใหม่สำหรับฟีเจอร์
- ทำการแก้ไข (เช่น แก้ typo ใน README)
- สร้าง Pull Request พร้อม description ที่ดี
- รอ feedback และปรับปรุงตาม comment
🌟 Challenge 4: Project Management
- สร้าง GitHub Project ใน repository
- สร้าง Issues สำหรับงานต่างๆ
- เพิ่ม Issues เข้าไปใน Project board
- ปรับสถานะ Issues ตามความคืบหน้า
- Link Issues กับ Pull Requests
🎯 สิ่งที่คุณได้เรียนรู้ในบทนี้
- ✅ Fork และจัดการ remote repositories
- ✅ สร้างและจัดการ Pull Requests
- ✅ ทำ Code Review อย่างมีประสิทธิภาพ
- ✅ จัดการ Issues และ Projects
- ✅ เข้าใจ GitHub Flow workflow
- ✅ รู้จัก GitHub Desktop
🚀 บทที่ 4: Advanced Features และ CI/CD
📋 เนื้อหาในบทนี้:
- GitHub Actions และ CI/CD Pipeline
- GitHub Pages สำหรับ hosting เว็บไซต์
- GitHub Secrets และ Environment Variables
- การใช้งาน GitHub API
- GitHub Packages และ Container Registry
- Security Features และ Best Practices
⚙️ GitHub Actions คืออะไร?
GitHub Actions เป็นระบบ CI/CD (Continuous Integration/Continuous Deployment) ที่ช่วยให้เราสามารถ:
- 🧪 รัน tests อัตโนมัติ เมื่อมีการ push หรือ PR
- 🚀 Deploy แอปพลิเคชัน ไปยัง server
- 📦 Build และ package โปรเจกต์
- 🔄 Automate workflows ต่างๆ
- 📧 ส่งการแจ้งเตือน เมื่อเกิดเหตุการณ์
📁 การสร้าง Workflow แรก
Workflow ถูกเก็บในโฟลเดอร์ .github/workflows/ เป็นไฟล์ YAML
ขั้นตอนการสร้าง:
- สร้างโฟลเดอร์ .github/workflows/ ใน repository
- สร้างไฟล์ ci.yml
- เพิ่มเนื้อหา workflow
name: CI Pipeline
# เมื่อไหร่ที่จะรัน workflow นี้
on:
push:
branches: [ main, develop ]
pull_request:
branches: [ main ]
jobs:
test:
runs-on: ubuntu-latest
steps:
# Checkout source code
- uses: actions/checkout@v4
# Setup Node.js
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '18'
cache: 'npm'
# Install dependencies
- name: Install dependencies
run: npm ci
# Run tests
- name: Run tests
run: npm test
# Run linting
- name: Run ESLint
run: npm run lint
🌐 GitHub Pages
GitHub Pages ให้เราสามารถ host เว็บไซต์ static ได้ฟรี!
การเปิดใช้ GitHub Pages:
- ไปที่ Settings ใน repository
- เลื่อนลงไปหา "Pages"
- เลือก source:
- Deploy from a branch: เลือก main หรือ gh-pages
- GitHub Actions: ใช้ workflow custom
- คลิก "Save"
- เว็บไซต์จะใช้ได้ที่:
https://username.github.io/repository-name
Workflow สำหรับ deploy ไปยัง GitHub Pages:
name: Deploy to GitHub Pages
on:
push:
branches: [ main ]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '18'
- name: Install and Build
run: |
npm ci
npm run build
- name: Deploy to GitHub Pages
uses: peaceiris/actions-gh-pages@v3
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
publish_dir: ./dist
🔐 GitHub Secrets
Secrets เป็นที่เก็บข้อมูลลับ เช่น API keys, passwords อย่างปลอดภัย
การเพิ่ม Secret:
- ไปที่ Settings → Secrets and variables → Actions
- คลิก "New repository secret"
- ตั้งชื่อ เช่น API_KEY
- ใส่ค่า secret
- คลิก "Add secret"
name: Deploy with Secrets
on:
push:
branches: [ main ]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Deploy to server
env:
API_KEY: ${{ secrets.API_KEY }}
DATABASE_URL: ${{ secrets.DATABASE_URL }}
run: |
echo "Deploying with API key: ${API_KEY:0:4}****"
# deployment script here
🧪 ตัวอย่าง Workflows ต่างๆ
🐍 Python Project:
name: Python CI
on: [push, pull_request]
jobs:
test:
runs-on: ubuntu-latest
strategy:
matrix:
python-version: [3.8, 3.9, 3.10]
steps:
- uses: actions/checkout@v4
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v4
with:
python-version: ${{ matrix.python-version }}
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install flake8 pytest
pip install -r requirements.txt
- name: Lint with flake8
run: flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics
- name: Test with pytest
run: pytest
🚀 Docker Build และ Push:
name: Docker Build
on:
push:
branches: [ main ]
tags: [ 'v*' ]
jobs:
docker:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2
- name: Login to Docker Hub
uses: docker/login-action@v2
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Build and push
uses: docker/build-push-action@v4
with:
context: .
push: true
tags: |
myapp:latest
myapp:${{ github.sha }}
📦 GitHub Packages
GitHub Packages เป็น package registry ที่รองรับ npm, Docker, Maven, NuGet
# การ publish npm package
name: Publish Package
on:
release:
types: [created]
jobs:
publish:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: '18'
registry-url: 'https://npm.pkg.github.com'
- run: npm ci
- run: npm publish
env:
NODE_AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
🔒 Security Features
🕵️ Dependabot:
ตรวจสอบและอัปเดต dependencies อัตโนมัติ
# .github/dependabot.yml
version: 2
updates:
- package-ecosystem: "npm"
directory: "/"
schedule:
interval: "weekly"
open-pull-requests-limit: 10
- package-ecosystem: "docker"
directory: "/"
schedule:
interval: "monthly"
🛡️ Code Scanning:
name: CodeQL
on:
push:
branches: [ main ]
pull_request:
branches: [ main ]
jobs:
analyze:
runs-on: ubuntu-latest
strategy:
matrix:
language: [ 'javascript', 'python' ]
steps:
- uses: actions/checkout@v4
- name: Initialize CodeQL
uses: github/codeql-action/init@v2
with:
languages: ${{ matrix.language }}
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v2
🔄 Advanced Git Techniques
🏷️ Git Tags สำหรับ Versioning:
# สร้าง tag
git tag v1.0.0
git tag -a v1.0.0 -m "Release version 1.0.0"
# Push tags
git push origin v1.0.0
git push origin --tags
# List tags
git tag -l
# Delete tag
git tag -d v1.0.0
git push origin --delete v1.0.0
🔄 Git Hooks:
# .git/hooks/pre-commit
#!/bin/sh
echo "Running pre-commit hook..."
# Run linting
npm run lint
if [ $? -ne 0 ]; then
echo "Linting failed. Commit aborted."
exit 1
fi
# Run tests
npm test
if [ $? -ne 0 ]; then
echo "Tests failed. Commit aborted."
exit 1
fi
echo "All checks passed. Proceeding with commit."
📊 GitHub API
ใช้ GitHub API เพื่อสร้างเครื่องมือหรือแอปพลิเคชันที่ทำงานกับ GitHub
# ตัวอย่าง: ดึงข้อมูล repository
curl -H "Authorization: token YOUR_TOKEN" \
https://api.github.com/repos/owner/repo
# ตัวอย่าง: สร้าง issue
curl -X POST \
-H "Authorization: token YOUR_TOKEN" \
-H "Accept: application/vnd.github.v3+json" \
https://api.github.com/repos/owner/repo/issues \
-d '{
"title": "Found a bug",
"body": "Something is not working",
"labels": ["bug"]
}'
JavaScript Example:
// ใช้ Octokit.js
import { Octokit } from "@octokit/rest";
const octokit = new Octokit({
auth: process.env.GITHUB_TOKEN
});
// ดึง issues
const { data: issues } = await octokit.rest.issues.listForRepo({
owner: 'owner',
repo: 'repo',
state: 'open'
});
console.log(`Found ${issues.length} open issues`);
// สร้าง PR
await octokit.rest.pulls.create({
owner: 'owner',
repo: 'repo',
title: 'Amazing new feature',
head: 'feature-branch',
base: 'main',
body: 'This PR adds amazing new features'
});
📈 Performance และ Monitoring
📊 Repository Insights:
- Traffic: ดูจำนวนผู้เยี่ยมชม
- Clones: ติดตาม clone statistics
- Forks: ดูว่าใครเอาไป fork
- Dependency graph: ดู dependencies
⚡ Performance Tips:
🚀 เพิ่มประสิทธิภาพ GitHub:
- .gitignore: อย่าเก็บไฟล์ที่ไม่จำเป็น
- LFS: ใช้ Git LFS สำหรับไฟล์ใหญ่
- Small commits: แบ่ง commit เป็นชิ้นเล็ก
- Branch cleanup: ลบ branch ที่ไม่ใช้แล้ว
- Actions optimization: ใช้ cache ใน workflows
🎯 Best Practices สำหรับ Production
🏢 Enterprise-level Practices:
- Branch Protection Rules:
- Require PR reviews
- Dismiss stale reviews
- Require status checks
- Restrict who can push
- Security:
- Use Secrets สำหรับข้อมูลลับ
- Enable 2FA
- Regular security scans
- Limit repository access
- Documentation:
- README ที่ครบถ้วน
- CONTRIBUTING guidelines
- Code of Conduct
- License information
🎯 แบบฝึกหัดสุดท้าย: Complete CI/CD Project
📝 Final Challenge: สร้าง Full-Stack Project
- สร้าง repository ใหม่สำหรับ web application
- ตั้งค่า GitHub Actions สำหรับ:
- Automated testing
- Code linting และ formatting
- Security scanning
- Build และ deploy ไปยัง GitHub Pages
- เพิ่ม Dependabot สำหรับการอัปเดต dependencies
- สร้าง PR template และ Issue templates
- ตั้งค่า branch protection rules
- สร้าง release พร้อม changelog
- เพิ่ม monitoring และ performance tracking
🏆 ยินดีด้วย! คุณได้เรียนรู้ GitHub แบบสมบูรณ์แล้ว!
ตอนนี้คุณสามารถ:
- ✅ ใช้ GitHub สำหรับ personal projects
- ✅ ทำงานร่วมกันในทีมได้อย่างมืออาชีพ
- ✅ ตั้งค่า CI/CD pipeline
- ✅ Deploy applications automatically
- ✅ จัดการ project แบบ enterprise
- ✅ ใช้ advanced features ต่างๆ
📚 แหล่งข้อมูลเพิ่มเติม
🔗 ลิงก์ที่เป็นประโยชน์:
📖 หนังสือแนะนำ:
- "Pro Git" by Scott Chacon (ฟรีออนไลน์)
- "GitHub Essentials" by Achilleas Pipinellis
- "Git Pocket Guide" by Richard Silverman
🎓 บทสรุปทั้ง 4 บท
📖 บทที่ 1: พื้นฐาน
- รู้จัก GitHub
- สมัครสมาชิก
- สร้าง Repository
- Web Interface
⚡ บทที่ 2: Git Commands
- ติดตั้ง Git
- Clone และ Branch
- Commit และ Push
- การแก้ปัญหา
🤝 บทที่ 3: Collaboration
- Fork และ Pull Request
- Code Review
- Issues และ Projects
- GitHub Flow
🚀 บทที่ 4: Advanced
- GitHub Actions
- CI/CD Pipeline
- Security Features
- Best Practices
🎉 ขอบคุณที่เรียนรู้ GitHub กับเรา!
หวังว่าคู่มือนี้จะช่วยให้คุณเป็น GitHub Expert 🌟
Happy Coding! 👨💻👩💻