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 ได้