Mirror a Repository [Gitlab]

2 min readJan 26, 2020

การทำ Repository mirroringโดยใช้ Gitlab

พอดีช่วงนี้เข้าไปยุ่งกับ Gitlab มากหน่อย เลยจะมีบทความเกี่ยวกับ Gitlab เอาไว้เตือนความจำนิดหน่อย

Mirror a Repository คือการทำให้ repo ทั้ง 2 นั้น มี branches, tags, และ commits เหมือนกัน

ยกตัวอย่างเช่น เมื่อเรามี external source repo จากที่อื่น แต่อยากมี source repo ไว้ที่ๆเราใช้ประจำด้วยและอยากมี commit ที่เหมือนๆ กัน เพื่อไม่ให้สับสน

มาเริ่มกันเลยดีกว่า ผมจะทำตามตัวอย่างด้านบนที่ยกมาเลยแล้วกัน…

เริ่มจาก ผมทำการสร้าง repo ทั้งสองขึ้นมา จาก Bitbucket และ Gitlab จากนั้นให้เข้าไปที่ repo ใน Gitlab เลือก Setting -> Repository -> Mirroring repositories

จากนั้นให้เราใส่ URL repository และ Password ที่ได้จาก Bitbucket จากนั้น กด Mirror repository เพียงเท่านี้เราก็ทำ mirror ได้แล้ว ให้ลองทำการ commit จากฝั่ง Gitlab ดู จะเห็นว่า commit จะไปขึ้นที่ Bitbucket เหมือนกัน

แต่ปัญหามันอยู่ที่ว่า ถ้าเราอัพเดทจากฝั่ง Bitbucket ก่อน แล้วฝั่ง Gitlab push ไปจะเป็นอย่างไร คำตอบคือ commit ฝั่ง Bitbucket หายครับ!! เพราะ Gitlab จะทำการ force update ดังนั้นจึงต้องทำ script hook มาเช็คก่อนจะ commit หรือ merge request อีกที

การทำ script เช็คนั้นจะยากนิดนึง เพราะต้องเข้าไปใน Gitlab Instance เพื่อเพิ่ม script โดยให้เราไปสร้างไฟล์ pre-receive ใน /var/opt/gitlab/git-data/repositories/<group>/<project>.git/custom-hooks/

จากนั้นใส่ code เช็ค ( สามารถปรับแต่งได้ตามความต้องการ )

จากนั้นให้ลองทำการ commit ฝั่ง Bitbucket ก่อน แล้วลอง commit ฝั่ง Gitlab ตามอีกครั้ง ส่วนผม ลองสร้าง Merge request แล้วลองกด merge ดู

เรียบร้อย merge/push ไม่ได้แล้ว

และนี่ก็เป็นเทคนิคง่ายๆที่สามารถนำไปปรับใช้กันได้ครับ วันนี้ต้องไปก่อนละ ไว้ลองเล่นอะไรแล้วจะมาแชร์ให้ได้ทราบกันอีก

ขอบคุณที่ติดตามกันครับ [I ❤ Bug]

--

--

Theerawat Kaewchote
Theerawat Kaewchote

No responses yet