☕GITEA-PCM

คู่มือเริ่มต้น

ทุกปุ่มในระบบนี้ตรงกับคำสั่ง git จริง เรียนรู้ครั้งเดียวใช้ได้กับ GitHub, GitLab และ Gitea

วันแรก: ตั้งค่าเครื่อง (ทำครั้งเดียว)

  1. ติดตั้ง Git จาก git-scm.com แล้วตรวจสอบว่าใช้ได้
    git --version
  2. บอก git ว่าคุณคือใคร (ชื่อนี้จะแสดงในประวัติ)
    git config --global user.name "ชื่อของคุณ"
    git config --global user.email "อีเมลที่ใช้สมัคร Gitea"
  3. ให้เครื่องจำรหัสผ่าน จะได้ไม่ต้องพิมพ์ทุกครั้ง
    git config --global credential.helper store

ทุกวัน: วงจรการทำงาน 4 ขั้น

  1. ดึงงานล่าสุด ก่อนเริ่มทำงานทุกครั้ง
    git pull
  2. แก้ไฟล์ ตามปกติด้วยโปรแกรมที่ถนัด แล้วดูว่าแก้อะไรไปบ้าง
    git status
  3. บันทึกเวอร์ชัน พร้อมข้อความที่อ่านแล้วเข้าใจ เช่น "แก้ปุ่มสมัครสมาชิกให้กดได้บนมือถือ"
    git add . && git commit -m "อธิบายสิ่งที่แก้"
  4. ส่งขึ้นเซิร์ฟเวอร์ ให้ทีมเห็น แล้วเปิดหน้า "ประวัติ" ในเว็บนี้เพื่อตรวจดู
    git push

กฎความปลอดภัย 5 ข้อ (ทุกคนต้องทำ)

  1. ห้าม commit ความลับ — รหัสผ่าน, API key, กุญแจ, ไฟล์ .env, ไฟล์ฐานข้อมูล ให้เก็บนอก git เสมอ ระบบจะขึ้นป้าย ⚠ ไฟล์ความลับ ถ้าพบไฟล์เหล่านี้ในโปรเจกต์
  2. มี .gitignore ก่อน commit แรก — โปรเจกต์ที่สร้างจากหน้าเว็บนี้มีให้แล้ว ถ้าสร้างเองให้ใช้ตัวอย่างด้านล่าง
  3. ดู git status ก่อน commit ทุกครั้ง — ใช้ git add ชื่อไฟล์ แทน git add . เมื่อไม่แน่ใจ
  4. ติดตั้งตัวกันความลับหลุด (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
  5. เปิดยืนยันตัวตน 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

ถ้าความลับหลุดขึ้นไปแล้ว ทำตามลำดับนี้

  1. เปลี่ยนรหัสผ่าน / ยกเลิก key นั้นทันที — สำคัญที่สุด และต้องทำก่อนข้ออื่น เพราะทุกคนที่ clone ไปแล้วมีสำเนาอยู่ในเครื่อง การลบจากเซิร์ฟเวอร์เอาคืนไม่ได้
  2. เอาไฟล์ออกจาก git (ไฟล์ในเครื่องยังอยู่) และกันไม่ให้กลับมาอีก
    git rm --cached ชื่อไฟล์ && echo "ชื่อไฟล์" >> .gitignore && git commit -m "เอาไฟล์ความลับออก" && git push
  3. แจ้งผู้ดูแลระบบ ถ้าต้องลบออกจากประวัติด้วย ผู้ดูแลจะใช้ 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 ชื่อไฟล์