บางครั้งคุณอาจต้องการ push โค้ดไปยังหลาย remote พร้อมกัน หรือทีมที่ต้องการ backup ไปหลายสถานที่ต่างกัน เช่น GitHub และ GitLab เพื่อความปลอดภัยในการจัดการ source code ด้วย ผู้ให้บริการโฮสติ้ง Cloud VPS คุณสามารถตั้งค่า multiple remote ได้อย่างง่ายดายและยืดหยุ่นสำหรับทีมพัฒนา
Remote ใน Git คืออะไร?
Remote คือการเชื่อมต่อหรือ link ไปยัง repository บนเครื่องอื่น (remote server) โดยปกติ repository หนึ่งมี remote เดียวชื่อว่า origin แต่เราสามารถเพิ่มหมู่หรือเปลี่ยน remote ได้ทั่วไป
คำสั่ง Git Remote ทั่วพื้นฐาน
# ดู remote ทั้งหมดพร้อมหลัง URL
git remote -v
# เพิ่ม remote ใหม่
git remote add <name> <url>
# ตัวอย่าง
git remote add github https://github.com/user/repo.git
git remote add gitlab [email protected]:user/repo.git
git remote add bitbucket https://bitbucket.org/user/repo.git
# ลบ remote
git remote remove gitlab
# เปลี่ยนชื่อ remote
git remote rename github origin-github
# แมบ URL ของ remote
git remote set-url origin https://github.com/user/newrepo.git
Push ไปหลาย Remote
วิธี 1: Push ไปแต่ละ Remote แยกต่างกัน
# Push ไป GitHub
git push github main
# Push ไป GitLab
git push gitlab main
# Push ไป Bitbucket
git push bitbucket main
วิธี 2: Push ไปหลาย Remote พร้อมกันในคำสั่งเดียว
เพื่อให้ push ไปหลายเซิร์ฟเวอร์พร้อมกันในคำสั่งเดียว ให้เพิ่ม push URL ไป remote origin:
# ดู push URL ปัจจุบันของ origin
git remote get-url --push origin
# เพิ่ม push URL ใหม่
git remote set-url --add --push origin [email protected]:user/repo.git
git remote set-url --add --push origin [email protected]:user/repo.git
# ตรวจสอบ fetch URL กับ push URL
git config --local --get-all remote.origin.url
git config --local --get-all remote.origin.pushurl
# push ไปทั้งหมดในคำสั่งเดียว
git push origin main
การใช้งานจริง: Mirror Repository
เพื่อการ backup Git repository หรือเก็บ backup ที่สมบูรณ์ สามารถใช้งานพิเศษแบบ mirror ใน Git:
# Clone แบบ bare (mirror)
git clone --mirror https://github.com/user/repo.git repo.git
# หากต้องการ backup จาก GitHub ไปยังเซิร์ฟเวอร์อื่น เช่น VPS ของ ผู้ให้บริการโฮสติ้ง
cd repo.git
# ตั้ง remote push url ไป GitLab Self-hosted
git remote set-url --push origin [email protected]:user/repo.git
# Push mirror ไปยังเซิร์ฟเวอร์ทั้งหมด
# หมายเหตุ: GitHub จะส่ง refs ทั้งหมดไป GitLab
git push --mirror
วิธีนี้จะเก็บ backup แบบสมบูรณ์ (full disaster recovery) เพื่อในกรณีที่ GitHub ไม่ access ได้หรือลบ account คุณยังคงมีข้อมูลครบถ้วน
ดู Pull และ Fetch จาก Multiple Remotes
เข้าใจ ความแตกต่างระหว่าง push, pull, fetch กันอย่างแท้จริง เพื่อให้เข้าใจ git workflow ได้อย่างชัดเจนเมื่อทำงานกับหลาย remote
# Fetch จากทั้ง remote
git fetch github
git fetch gitlab
git fetch bitbucket
# Pull คูณร้อก = fetch + merge
# มักใช้เมื่อต้องการดึงข้อมูลจาก remote ที่ระบุ
git pull github main
# ถ้าไม่ระบุชื่อ) Fetch จากชื่อ default ที่เซ็ตไว้ คือ origin
git fetch
git fetch --all
Git Refspec: การแมบ Branch สำหรับ Pull
ทำความเข้าใจ refspec มาคสิ่งสำคัญสำหรับการจัดการ git config เมื่อทำงานกับ multiple remotes เบื้องต้น
# ดูค่า fetch refspec ในปัจจุบันของ github remote
git config --get-all remote.github.fetch
# ลดการ Refspec เพื่อดึงเฉพาะ main branch
# รูปแบบ Refspec: +<source>:<destination>
git config remote.github.fetch "+refs/heads/main:refs/remotes/github/main"
# เสิบการเพิ่ม tracking branches
git branch -v
การเชื่อมต่อ GitHub/GitLab อย่างถูกต้อง
ค้นหาวิธี connect Git กับ GitLab self-hosted บน VPS สำหรับการตั้งค่าอื่นๆ และการเชื่อมต่อแบบมัลติเซิร์ฟเวอร์บน ผู้ให้บริการโฮสติ้ง VPS
# SSH key config เพื่อแยกคีย์สำหรับ SSH servers ต่างๆ
# เพิ่มค่าคอนฟิก ผู้ให้บริการโฮสติ้ง ที่สามารถทำหลาย SSH keys สำหรับ multiple servers
# ~/.ssh/config
Host github
HostName github.com
User git
IdentityFile ~/.ssh/id_github
Host gitlab-self
HostName gitlab.yourdomain.com
User git
IdentityFile ~/.ssh/id_gitlab
Workflow ตัวอย่างสำหรับทีม
ตัวอย่างการสร้าง feature branch บน GitLab และ backup ไป GitHub:
# 1. สร้างและ checkout feature branch
git checkout -b feature/new-api
# 2. เพิ่มไฟล์และสร้าง commits
git add src/new-api.js
git commit -m "feat: add new API endpoint"
# 3. Push ไป GitLab (primary repo)
git push gitlab feature/new-api
# 4. Push ไป GitHub (backup)
git push github feature/new-api
# 5. สร้าง Pull Request บน GitLab
# (เปิด Dashboard GitLab และสร้าง PR)
# 6. Merge ไป main บน GitLab
# (เมื่อผ่าน code review สำเร็จ)
# 7. Pull และ Push sync ไป GitHub
git checkout main
git pull gitlab main
git push github main
Best Practices
- ตั้งชื่อ remote หลัก เป็น
originเพื่อเอื่อความสม่ำเสมอ - เชคก push refspec ว่าแน่ใจว่ากำลัง push ไปเซิร์ฟเวอร์ที่ถูกต้อง
- ดู commit history ก่อน rebase เพื่อหลีกเลี่ยง diverge ของหลาย remotes
- ใช้ GitHub เป็น backup หลักเสมอเพื่อความปลอดภัย
- ตั้ง GitLab self-hosted บน ผู้ให้บริการโฮสติ้ง VPS เพื่อควบคุมข้อมูลเอง
สรุป
การตั้งค่า multiple remote ช่วยให้คุณ backup โค้ดหลายที่ ทำให้ workflow ยืดหยุ่นมากขึ้น ไม่ว่าจะเป็นการ deploy ไปหลาย environment หรือเตรียม disaster recovery โดยการเรียนรู้คำสั่ง Git remote แนวโคิดดีๆ คุณจะเปิดโอกาสใหม่ในการจัดการ repository ส่วนบน ผู้ให้บริการโฮสติ้ง Cloud VPS หลักการนี้มีประโยชน์สำหรับทีมพัฒนาขนาดเล็กหรือโปรเจกต์ขนาดใหญ่
