Skip to main content

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) remote-2

Example

  • สมมุติตามด้านบนเลย และ Dev B branch: feature/new-2 ต้องการนำ code เข้า main จะต้องทำ
git pull origin main

# จะเกิด conflict เกิดขึ้น ต้องแก้ confilct
# หลังจากแก้ conflict เสร็จ = ให้ commit ซ้ำ
git commit -am "<message แก้อะไรใน conflict ไป>"

ตัวอย่างภาพ conflict remote-1

จะต้องทำการเลือก conflict ว่าจะเอา change ของใครระหว่าง

  • code ของ Dev A (ที่อยู่ใน branch main อยู่แล้ว)
  • code ของ Dev B (ที่กำลังขอเข้า branch ไป)
  • หรือจะแก้ไขใหม่ (รวมของ Dev A และของตัวเองเข้าไป) ก็ต้องทำการแก้ไข
  • เมื่อเสร็จ = สามารถตรวจสอบผ่าน Pull request ได้