คู่มือเริ่มต้น
ทุกปุ่มในระบบนี้ตรงกับคำสั่ง git จริง เรียนรู้ครั้งเดียวใช้ได้กับ GitHub, GitLab และ Gitea
วันแรก: ตั้งค่าเครื่อง (ทำครั้งเดียว)
- ติดตั้ง Git จาก git-scm.com แล้วตรวจสอบว่าใช้ได้
git --version - บอก git ว่าคุณคือใคร (ชื่อนี้จะแสดงในประวัติ)
git config --global user.name "ชื่อของคุณ"git config --global user.email "อีเมลที่ใช้สมัคร Gitea" - ให้เครื่องจำรหัสผ่าน จะได้ไม่ต้องพิมพ์ทุกครั้ง
git config --global credential.helper store
ทุกวัน: วงจรการทำงาน 4 ขั้น
- ดึงงานล่าสุด ก่อนเริ่มทำงานทุกครั้ง
git pull - แก้ไฟล์ ตามปกติด้วยโปรแกรมที่ถนัด แล้วดูว่าแก้อะไรไปบ้าง
git status - บันทึกเวอร์ชัน พร้อมข้อความที่อ่านแล้วเข้าใจ เช่น "แก้ปุ่มสมัครสมาชิกให้กดได้บนมือถือ"
git add . && git commit -m "อธิบายสิ่งที่แก้" - ส่งขึ้นเซิร์ฟเวอร์ ให้ทีมเห็น แล้วเปิดหน้า "ประวัติ" ในเว็บนี้เพื่อตรวจดู
git push
กฎความปลอดภัย 5 ข้อ (ทุกคนต้องทำ)
- ห้าม commit ความลับ — รหัสผ่าน, API key, กุญแจ, ไฟล์ .env, ไฟล์ฐานข้อมูล ให้เก็บนอก git เสมอ ระบบจะขึ้นป้าย ⚠ ไฟล์ความลับ ถ้าพบไฟล์เหล่านี้ในโปรเจกต์
- มี .gitignore ก่อน commit แรก — โปรเจกต์ที่สร้างจากหน้าเว็บนี้มีให้แล้ว ถ้าสร้างเองให้ใช้ตัวอย่างด้านล่าง
- ดู
git statusก่อน commit ทุกครั้ง — ใช้git add ชื่อไฟล์แทนgit add .เมื่อไม่แน่ใจ - ติดตั้งตัวกันความลับหลุด (pre-commit hook) — ระบบจะไม่ยอมให้ commit ถ้าพบไฟล์หรือข้อความที่หน้าตาเหมือนรหัสผ่าน (ไฟล์
tools/pre-commit-secrets.shในโปรเจกต์ EasyGit)cp tools/pre-commit-secrets.sh .git/hooks/pre-commit && chmod +x .git/hooks/pre-commit - เปิดยืนยันตัวตน 2 ขั้น (2FA) ในบัญชี Gitea และใช้ access token ล็อกอินหน้านี้แทนรหัสผ่าน
.gitignore พื้นฐาน
บันทึกเป็นไฟล์ชื่อ .gitignore ที่โฟลเดอร์บนสุดของโปรเจกต์ ก่อน commit แรก
# ===== ความลับ: ห้าม commit เด็ดขาด (ดู SECURITY.md) ===== .env .env.* !.env.example *.pem *.key *.p12 *.pfx *.jks *.keystore *.ppk id_rsa* id_ed25519* !*.pub .npmrc .pypirc .netrc .git-credentials credentials*.json service-account*.json *.tfstate *.tfstate.* *.kdbx *.ovpn # ===== ไฟล์ฐานข้อมูลและไฟล์สำรอง ===== *.sql *.sql.gz *.dump *.bak *.sqlite *.sqlite3 # ===== ไฟล์ที่สร้างขึ้นเอง / ของเครื่องแต่ละคน ===== node_modules/ vendor/ __pycache__/ .venv/ dist/ build/ .next/ *.log .DS_Store Thumbs.db .idea/ .vscode/* !.vscode/extensions.json
ถ้าความลับหลุดขึ้นไปแล้ว ทำตามลำดับนี้
- เปลี่ยนรหัสผ่าน / ยกเลิก key นั้นทันที — สำคัญที่สุด และต้องทำก่อนข้ออื่น เพราะทุกคนที่ clone ไปแล้วมีสำเนาอยู่ในเครื่อง การลบจากเซิร์ฟเวอร์เอาคืนไม่ได้
- เอาไฟล์ออกจาก git (ไฟล์ในเครื่องยังอยู่) และกันไม่ให้กลับมาอีก
git rm --cached ชื่อไฟล์ && echo "ชื่อไฟล์" >> .gitignore && git commit -m "เอาไฟล์ความลับออก" && git push - แจ้งผู้ดูแลระบบ ถ้าต้องลบออกจากประวัติด้วย ผู้ดูแลจะใช้
git filter-repoแล้วทุกคนต้อง clone ใหม่ (ห้ามทำเองโดยไม่บอกทีม เพราะจะทำให้ประวัติของทุกคนไม่ตรงกัน)
คำศัพท์: หน้าเว็บนี้ ↔ git
| ในระบบนี้ | คำของ git | ความหมาย |
|---|---|---|
| โปรเจกต์ | repository (repo) | กล่องเก็บโค้ดและไฟล์ทั้งหมด พร้อมประวัติการแก้ไขทุกครั้ง |
| บันทึกเวอร์ชัน | commit | การถ่ายภาพสถานะไฟล์ ณ ตอนนั้น พร้อมข้อความอธิบายว่าแก้อะไร |
| ส่งขึ้นเซิร์ฟเวอร์ | push | ส่งเวอร์ชันที่บันทึกในเครื่องขึ้นมาให้ทีมเห็น |
| ดึงงานล่าสุด | pull | ดึงเวอร์ชันใหม่ที่คนอื่นส่งขึ้นมาลงเครื่องเรา |
| ดาวน์โหลดโปรเจกต์ | clone | คัดลอกโปรเจกต์ทั้งก้อน (รวมประวัติ) มาที่เครื่องครั้งแรก |
| ประวัติ | log | รายการเวอร์ชันทั้งหมด เรียงจากใหม่ไปเก่า |
| เปรียบเทียบ | diff | ดูว่าบรรทัดไหนถูกเพิ่ม (เขียว) หรือถูกลบ (แดง) |
| ย้อนการแก้ไข | revert | สร้างเวอร์ชันใหม่ที่ยกเลิกสิ่งที่แก้ไปในครั้งก่อน โดยประวัติเดิมไม่หาย |
| ฉบับทดลอง | branch | ทางแยกสำหรับลองของใหม่โดยไม่กระทบงานหลัก (main) |
เจอปัญหาบ่อย
push ไม่ได้ ขึ้นว่า rejected / fetch first
มีคนส่งงานขึ้นมาก่อน ให้ดึงงานล่าสุดลงมาก่อนแล้วค่อย push
git pull && git pushขึ้นว่า CONFLICT
คุณกับเพื่อนแก้บรรทัดเดียวกัน เปิดไฟล์ที่ระบบบอก เลือกว่าจะเก็บส่วนไหน (ลบเครื่องหมาย <<<<<<< ======= >>>>>>> ออก) แล้วบันทึกอีกครั้ง
git add . && git commit -m "รวมงานกับเพื่อน" && git pushแก้ไฟล์ผิด อยากกลับไปเหมือนเดิม (ยังไม่ได้บันทึก)
git restore ชื่อไฟล์