Git server และคำสั่ง remote
Git local และ Git server คืออะไร ?
โดย ปกติ เวลาที่เรามีการเก็บ commit history เอาไว้ จะทำการเก็บไว้ .git = เป็นการเก็บ Git ไว้ในเครื่อง Local
เมื่อเราจะทำการเก็บไว้บน Git server อย่าง github, gitlab เราจำเป็นต้องส่ง .git ขึ้นไปบน Git server เพื่อให้สามารถเก็บบันทึก git ขึ้น cloud เอาไว้ได้
คำสั่งพื้นฐานของ Git Server
1. git remote
คำสั่งทำการเพิ่ม url ของ git server เพื่อระบุปลายทางที่เราจะจัดการ
# คำสั่ง
git remote add <ตัวแปร> <url git>
# ตัวอย่างการใช้งาน
git remote add origin https://github.com/mikelopster/mikelopster-docs
2. git push
คำสั่งสำหรับนำ branch จาก Git local เข้าสู่ Git server
# คำสั่ง
git push <ตัวแปร> <branch>
# ตัวอย่าง
git push origin main
3. git pull
คำสั่งสำหรับนำข้อมูล branch จาก Git server เข้าสู่ Git local ใน branch ปัจจุบัน
# คำสั่ง
git pull <ตัวแปร> <branch>
# ตัวอย่าง
git pull origin main
เช่น ถ้าเราอยู่ branch: develop และ เราใช้คำสั่ง
git pull origin main
จะเท่ากับว่าเป็นการ update branch main (จาก Git server)
4. git fetch
กรณีที่อยากเอา branch จาก Git Server เข้ามาสู่ Git Local สามารถใช้คำสั่งนี้ในการ update branch ได้
# pattern
git fetch <ตัวแปร> <branch>
# example
git fetch origin main
# ถ้าเอาหมดทุก branch
git fetch origin
5. git clone
กรณีที่ เราต้องการดึง git ที่ฝากไว้บน Git server ลงมาทั้ง folder ใหม่ใน Git local (พร้อม .git ที่เป็น history เลย) สามารถใช้คำสั่งนี้ได้
# pattern
git clone <url git>
# example
git clone https://github.com/mikelopster/web101.git
เมื่อทำงานกันหลายคน = รู้จักกับ Pull request
เมื่อเราต้องมีการทำงานกันหลายคน สมมุติว่า
- Developer A ทำงาน Branch feature/new-1
- Developer B ทำงาน Branch feature/new-2
แล้วปรากฎว่า Dev A นำ ข้อมูลจาก branch feature/new-1 เข้า branch main ก่อน และ Dev B กำลังพยายามนำ feature/new-2 เข้า branch main เหมือนกัน ปรากฎว่า
- ถ้า ทั้ง 2 คนไม่แก้ไฟล์เดียวกัน = auto merge และทำการรวม history กัน
- ทั้ง 2 คนแก้ที่ไฟล์เดียวกัน = เกิดปรากฎการ conflict เกิดขึ้นและต้องทำการแก้ conflict
ซึ่งสิ่งนี้สามารถตรวจสอบและแก้ไขได้จากการ
- ไปยัง branch ของ Dev B และทำการ pull update branch main ลงเครื่องของตัวเอง = จะเจอปรากฎการ conflict เหมือนกัน
- เมื่อเกิดการ conflict = คนที่ทำการรวม (ในเคสนี้คือ Dev B) จะต้องทำการเลือกว่าจะเอา code ชุดไหนมาใช้
- Pull request (Merge request) สามารถใช้สำหรับการส่งเรื่องก่อนที่ขะรวมเข้า branch ได้ (แต่ท้ายที่สุดก็ต้องแก้ conflict เหมือนกัน)
ตัวอย่างการขอเปิด Pull request (ใน github)
Example
- สมมุติตามด้านบนเลย และ Dev B branch: feature/new-2 ต้องการนำ code เข้า main จะต้องทำ
git pull origin main
# จะเกิด conflict เกิดขึ้น ต้องแก้ confilct
# หลังจากแก้ conflict เสร็จ = ให้ commit ซ้ำ
git commit -am "<message แก้อะไรใน conflict ไป>"
ตัวอย่างภาพ conflict
จะต้องทำก ารเลือก conflict ว่าจะเอา change ของใครระหว่าง
- code ของ Dev A (ที่อยู่ใน branch main อยู่แล้ว)
- code ของ Dev B (ที่กำลังขอเข้า branch ไป)
- หรือจะแก้ไขใหม่ (รวมของ Dev A และของตัวเองเข้าไป) ก็ต้องทำการแก้ไข
- เมื่อเสร็จ = สามารถตรวจสอบผ่าน Pull request ได้