Featured image of post ความแตกต่างระหว่างการพัฒนาด้วย Git Worktree และ Git Branch คืออะไร? เมื่อไหร่ควรใช้ Git Worktree?

ความแตกต่างระหว่างการพัฒนาด้วย Git Worktree และ Git Branch คืออะไร? เมื่อไหร่ควรใช้ Git Worktree?

กำลังพัฒนาฟีเจอร์ใหม่อยู่ดีๆ ก็โดนสั่งให้แก้บั๊กกระทันหัน? เบื่อกับสภาพแวดล้อมที่ยุ่งเหยิงและไฟล์บิลด์ที่ตกค้างใช่ไหม? บทความนี้จะสอนวิธีใช้ Git Worktree ในการ 'เปิดสาขา' เพื่อการพัฒนาคู่ขนานที่แท้จริงและการแยกสภาพแวดล้อมออกจากกัน เพื่อให้การทำงานของคุณราบรื่นไม่มีสะดุด!

ในขณะที่คุณกำลังพัฒนาฟีเจอร์ใหม่อยู่ครึ่งทาง จู่ๆ หัวหน้าก็เดินมาบอกว่ามีบั๊กฉุกเฉินต้องรีบแก้ คุณจะทำอย่างไร?

คนส่วนใหญ่อาจจะใช้ git stash เพื่อเก็บโค้ดที่เขียนไว้ครึ่งๆ กลางๆ ลงลิ้นชักก่อน แล้วค่อยเปลี่ยน Branch ไปแก้บั๊ก

แต่ถ้าสิ่งที่คุณเปลี่ยนแปลงนั้นเกี่ยวข้องกับการตั้งค่าสภาพแวดล้อมจำนวนมาก หรือถ้าการเปลี่ยน Branch ทำให้ node_modules และ ไฟล์คอมไพล์ (Build Artifacts) ตีกันมั่วไปหมด นั่นก็มากพอที่จะทำให้คุณอยากจะทุบคีย์บอร์ดทิ้ง

และนี่คือจุดที่ Git Worktree จะกลายมาเป็นพระเอกช่วยชีวิตคุณ!

Git Worktree คืออะไร?

คุณสามารถเปรียบเทียบการทำงานของ Git ได้กับการ “ปรับปรุงหรือซ่อมแซมบ้าน”

ในการใช้ git branch แบบดั้งเดิม เมื่อคุณเปลี่ยน Branch เฟอร์นิเจอร์ทั้งหมดในห้องจะหายวับไปต่อหน้าต่อตาคุณในทันที และจัดเรียงใหม่ให้เข้ากับอีกงานหนึ่งโดยอัตโนมัติ

แม้ว่ามันจะช่วยประหยัดพื้นที่ แต่ข้อเสียก็คือ “มลพิษทางสภาพแวดล้อม” คุณต้องเก็บจานชามที่ยังไม่ล้างเข้าตู้ก่อนถึงจะสลับ Branch ได้ และหลังจากสลับแล้ว กลิ่นน้ำมันควันจากการทำงานครั้งก่อนก็อาจจะยังคงลอยคละคลุ้งอยู่ในอากาศ

ในทางกลับกัน Git Worktree เปรียบเสมือนการปลูกบ้านที่เหมือนกันเป๊ะอีกหลังบนพื้นที่ว่างข้างๆ กัน

พูดง่ายๆ ก็คือ หลักการทำงานเบื้องหลังของ Git ก็คือ:

“หนึ่งวิญญาณ (ฐานข้อมูล .git), หลายร่าง (โฟลเดอร์ทำงาน)”

คุณสามารถเป็นเจ้าของ “สาขาพัฒนาฟีเจอร์” และ “สาขาซ่อมบำรุงฉุกเฉิน” ไปพร้อมๆ กันได้ มือซ้ายของคุณเขียนลอจิก AI ในหน้าต่าง A ในขณะที่มือขวาแก้บั๊กในหน้าต่าง B โดยไม่มีอะไรมารบกวนกันเลย และนั่นแหละคือ การพัฒนาคู่ขนานที่แท้จริง

คู่มือการใช้งาน Worktree ภาคปฏิบัติ

เพื่อรักษาสมาธิและลื่นไหลไปกับการทำงานระหว่างการพัฒนา โครงสร้างไดเรกทอรีและการตั้งค่าสภาพแวดล้อมคือกุญแจสำคัญ

1. การจัดการไดเรกทอรีแบบคู่ขนาน: อย่าตั้งสาขาไว้ในสำนักงานใหญ่

หลายคนที่ใช้ Worktree เป็นครั้งแรกมักจะเผลอไปสร้างไดเรกทอรีใหม่ไว้ในโฟลเดอร์โปรเจกต์เดิม อย่าทำแบบนั้นเด็ดขาด! มันจะทำให้ Git ปั่นป่วนและวนลูปไม่สิ้นสุด วิธีที่ถูกต้องในการสร้าง Git Worktree คือ:

วางสำนักงานใหญ่ (main) และสาขาย่อยของงาน (feature) ให้ขนานกัน

# สั่งสร้าง Worktree จากสำนักงานใหญ่ แต่ให้ตั้งไดเรกทอรีของ Worktree อยู่นอกไดเรกทอรีโปรเจกต์เดิม
git worktree add ../my-app-feat-ai dev-branch

โครงสร้างไดเรกทอรีของคุณควรจะหน้าตาประมาณนี้:

- my-project/       # โฟลเดอร์แพ็กเกจใหญ่
  - main-repo/      # สำนักงานใหญ่ที่มั่นคง
  - feat-ai-search/ # สาขาใหม่ที่กำลังก่อสร้าง

2. การแยกการตั้งค่าสภาพแวดล้อม: ให้แต่ละสาขามีวิญญาณเป็นของตัวเอง

ในเมื่อไดเรกทอรีโปรเจกต์แยกออกจากกันแล้ว ไฟล์การตั้งค่า .env ของคุณก็สามารถแยกออกจากกันได้เช่นกัน

คุณสามารถเชื่อมต่อกับฐานข้อมูลสำหรับการทดสอบใน feat-ai-search ในขณะที่ยังคงใช้ฐานข้อมูลสำหรับการพัฒนาเดิมใน main ด้วยวิธีนี้ เวลาคุณสลับหน้าต่าง คุณก็ไม่จำเป็นต้องเปลี่ยนข้อมูลการเชื่อมต่อเลย

หลังจากเข้ามาในไดเรกทอรีของ Worktree แล้ว คุณก็จะสามารถใช้ตัวแปรสภาพแวดล้อมของไดเรกทอรี Worktree นั้นๆ ในการพัฒนาได้โดยตรง โดยไม่จำเป็นต้องทำการสลับหน้าต่างหรือสร้างสภาพแวดล้อมใหม่เลย ความรู้สึกแบบ “เหยียบเข้ามาปุ๊บก็เริ่มงานได้ปั๊บ” นั้นยอดเยี่ยมจริงๆ

กระบวนการรวม Worktree

หลังจากที่เสร็จสิ้นการพัฒนาภายใน Worktree แล้ว ระบบการทำงานนั้นเหมือนกับ Branch แบบดั้งเดิมทุกประการ เพียงแต่ว่ามีเพิ่มการกระทำ “รื้อถอน” ขึ้นมาอีก 1 ขั้นตอนเท่านั้น

ลำดับขั้นตอนการทำงาน คำอธิบาย
1. ทำการ Commit & Push ที่สาขา คุณจะต้องไปที่สาขานั้นด้วยตัวเองเพื่อลงนามอนุญาต
2. ตรวจสอบและรับงานที่สำนักงานใหญ่ (Merge) คุณสามารถกลับไปที่ main เพื่อรวม หรือสามารถกด Pull Request (PR) ได้โดยตรง
3. ขั้นตอนการรื้อถอนที่งดงาม (Remove) เมื่อภารกิจเสร็จสิ้นแล้ว อย่าลบโฟลเดอร์โดยตรง ให้ใช้คำสั่งของ Git ในการรื้อถอน: git worktree remove ../feat-ai-search

ตู้ม! กระท่อม Worktree ชั่วคราว ถูกรื้อถอนออกไป พื้นที่ฮาร์ดดิสก์ถูกเรียกคืน และสำนักงานใหญ่ของคุณยังคงสะอาดเอี่ยมอ่อง

คู่มือการหลีกเลี่ยงข้อผิดพลาดของ Worktree

แม้ว่า Worktree จะมีประโยชน์มาก แต่ก็ยังมีหลุมพรางสองสามข้อที่ต้องระวัง:

รายการ คำอธิบาย
อย่าเคลื่อนย้ายสำนักงานใหญ่สะเปะสะปะ เพราะว่า Worktree บันทึกเป็นพาธแบบตายตัว หากคุณเปลี่ยนชื่อไดเรกทอรีสำนักงานใหญ่ สาขา Worktree จะตายเพราะมันหา “วิญญาณ” ของมันไม่เจอ
ห้ามเปิด Branch ซ้อนกัน ไม่อนุญาตให้ทำการ Check Out Branch เดียวกัน ใน Worktree สองอันพร้อมกัน
หุ่นยนต์ดูดฝุ่น prune หากคุณเผลอใจลบโฟลเดอร์ด้วยคำสั่ง rm -rf ไปแล้ว อย่าลืมเข้าไปรัน git worktree prune เพื่อเคลียร์เรคคอร์ดที่หลงเหลืออยู่ใน .git ออกให้เรียบร้อยด้วย

สรุป: ฉันควรเลิกใช้ Git Branch ไหม?

สถานการณ์ที่แตกต่างกันก็ต้องใช้วิธีการพัฒนาต่างกันไป มันไม่ใช่ว่าอย่างใดอย่างหนึ่งจะเข้ามาแทนที่อีกอย่างหนึ่ง แต่มันขึ้นอยู่กับความเหมาะสมในแต่ละสถานการณ์มากกว่า

สถานการณ์ คำอธิบาย
การปรับเปลี่ยนเล็กๆ น้อยๆ ในแแต่ละวัน ก็ใช้ branch ต่อไป เพราะมันเบาและรวดเร็ว
งานสเกลใหญ่ ยกตัวอย่างเช่น การรีแฟคเตอร์โค้ดระบบที่มีขนาดใหญ่, การปรับเปลี่ยนเกี่ยวกับตัวแปรสภาพแวดล้อมหลายๆ ตัว, หรือ งานที่ต้องใช้เวลาในการทำงานร่วมกันกับ AI นานๆ แบบนี้สิถึงจะเรียกว่าการเปิด Worktree ขึ้นมาใช้เป็นชอยส์ที่ตอบโจทย์ที่สุด

Git Worktree ไม่ใช่แค่คำสั่งๆ หนึ่งเท่านั้น แต่มันคือเครื่องมืออันทรงพลังที่จะช่วยให้พวกเราสามารถรักษาความลื่นไหลในขณะทำงานพัฒนาระบบร่วมกันได้ ดังนั้นครั้งหน้าเวลาคุณเจองานที่มันวุ่นวายซับซ้อน หรือต้องใช้เวลาทำนานๆ ก็อย่าลืมลองเปิด “สาขา Git Worktree” แบบเป็นเอกเทศดู เพื่อรับประสบการณ์ในการพัฒนาที่ลื่นไหลแบบสุดใจที่คุณไม่เคยสัมผัสมาก่อน!

Reference

All rights reserved,未經允許不得隨意轉載
ถูกสร้างด้วย Hugo
ธีม Stack ออกแบบโดย Jimmy