ในขณะที่คุณกำลังพัฒนาฟีเจอร์ใหม่อยู่ครึ่งทาง จู่ๆ หัวหน้าก็เดินมาบอกว่ามีบั๊กฉุกเฉินต้องรีบแก้ คุณจะทำอย่างไร?
คนส่วนใหญ่อาจจะใช้ 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” แบบเป็นเอกเทศดู เพื่อรับประสบการณ์ในการพัฒนาที่ลื่นไหลแบบสุดใจที่คุณไม่เคยสัมผัสมาก่อน!