นักพัฒนา Git core ตั้งค่าและใช้งาน Git กันอย่างไร?
(blog.gitbutler.com)- Scott Chacon ผู้เขียน "Pro Git" อธิบายการตั้งค่า Git บางอย่างที่เขาเปิดใช้แบบ global และเหตุผลที่ทำเช่นนั้น
- หลายการตั้งค่านี้เป็นสิ่งที่เขาเรียนรู้มาจากนักพัฒนาที่ทำงานกับโค้ดเบส Git core โดยตรง
- ด้านล่างคือการตั้งค่า
~/.gitconfigที่ทำให้ Git ใช้งานได้ดีขึ้น[column] ui = auto [branch] sort = -committerdate [tag] sort = version:refname [init] defaultBranch = main [diff] algorithm = histogram colorMoved = plain mnemonicPrefix = true renames = true [push] default = simple autoSetupRemote = true followTags = true [fetch] prune = true pruneTags = true all = true # มีเหตุผลอะไรที่จะไม่ใช้ล่ะ? [help] autocorrect = prompt [commit] verbose = true [rerere] enabled = true autoupdate = true [core] excludesfile = ~/.gitignore [rebase] autoSquash = true autoStash = true updateRefs = true # การตั้งค่าตามความชอบส่วนตัว (ยกเลิกคอมเมนต์เมื่อจำเป็นแล้วใช้งาน) [core] # fsmonitor = true # untrackedCache = true [merge] # (หากเวอร์ชัน Git ต่ำกว่า 2.3 ให้ใช้ ‘diff3’) # conflictstyle = zdiff3 [pull] # rebase = true
นักพัฒนา Git core ตั้งค่า Git กันอย่างไร?
- ใน mailing list ของ Git เคยมีครั้งหนึ่งที่ Felipe Contreras เสนอให้ทีม core ลบการตั้งค่าและ alias ทั้งหมด แล้วลองใช้ Git แบบค่าเริ่มต้น
- ผลของการทดลองนั้นคือมีการเสนอการตั้งค่า 9 รายการและ alias 3 รายการให้เป็นค่าเริ่มต้นใหม่
merge.conflictstyle = zdiff3 rebase.autosquash = true rebase.autostash = true commit.verbose = true diff.colorMoved = true diff.algorithm = histogram grep.patternType = perl feature.experimental = true branch.sort = committerdate - การตั้งค่าเหล่านี้ยังไม่ได้ถูกรับไปใช้เป็นค่าเริ่มต้น
- แต่สิ่งที่น่าสนใจคือ นักพัฒนา Git จำนวนมากกลับใช้งาน Git ได้ลำบากหากไม่เปิดบางตัวในรายการนี้
- และที่น่าสนใจกว่านั้นคือ คนส่วนใหญ่ในพวกคุณอาจไม่รู้เลยว่าสิ่งเหล่านี้หมายถึงอะไร
- จะอธิบายโดยแบ่งเป็น 3 หมวดหมู่
- สิ่งที่ทำให้ Git ดีขึ้นอย่างชัดเจน (Clearly Makes Git Better)
- มีเหตุผลอะไรที่จะไม่ใช้ล่ะ? (Why the Hell Not?)
- เรื่องของรสนิยม (A Matter of Taste)
# สิ่งที่ทำให้ Git ดีขึ้นอย่างชัดเจน
การจัดเรียงรายการ branch
- โดยปกติ Git จะเรียง branch ตามตัวอักษร แต่การเรียงตามวันที่ commit ล่าสุดอาจมีประโยชน์มากกว่า
- สามารถตั้งค่าให้เรียง branch ตาม commit ล่าสุด และแสดงผลแบบคอลัมน์ได้ดังนี้
git config --global column.ui auto git config --global branch.sort -committerdate
การจัดเรียงรายการ tag
- หากต้องการเรียง tag ตามเวอร์ชันแทนการเรียงตามตัวอักษร ให้ใช้การตั้งค่านี้
git config --global tag.sort version:refname
การตั้งชื่อ default branch
- หากต้องการกำหนดชื่อ default branch ตอนสร้าง repository ใหม่ ให้ตั้งค่าดังนี้
git config --global init.defaultBranch main
การตั้งค่า diff ที่ดีขึ้น
- เปลี่ยนอัลกอริทึม diff เริ่มต้นเป็น
histogramเพื่อให้เปรียบเทียบได้แม่นยำขึ้น - หากต้องการตรวจจับการย้ายโค้ดและแสดงสี ให้เพิ่มการตั้งค่าดังนี้
git config --global diff.algorithm histogram git config --global diff.colorMoved plain git config --global diff.mnemonicPrefix true git config --global diff.renames true
การตั้งค่า push ที่ดีขึ้น
- สามารถปรับพฤติกรรมของ push ให้ดีขึ้นได้ด้วยการตั้งค่าต่อไปนี้
git config --global push.default simple git config --global push.autoSetupRemote true git config --global push.followTags true
การตั้งค่า fetch ที่ดีขึ้น
- หากต้องการลบ branch และ tag ที่ไม่จำเป็นโดยอัตโนมัติระหว่าง fetch ให้ใช้การตั้งค่าดังนี้
git config --global fetch.prune true git config --global fetch.pruneTags true git config --global fetch.all true
# มีเหตุผลอะไรที่จะไม่ใช้ล่ะ?
พรอมต์แก้คำสั่งอัตโนมัติ
- หากต้องการให้ระบบตรวจจับคำสั่งพิมพ์ผิดและเสนอคำแนะนำ ให้ใช้ดังนี้
git config --global help.autocorrect prompt
แสดง diff ตอน commit
- หากต้องการให้แสดงเนื้อหาที่เปลี่ยนไปพร้อมกันตอนเขียนข้อความ commit ให้เพิ่มการตั้งค่านี้
git config --global commit.verbose true
ใช้การแก้ conflict เดิมซ้ำ
- หากต้องการนำวิธีแก้ conflict ครั้งก่อนกลับมาใช้ซ้ำโดยอัตโนมัติ ให้ใช้การตั้งค่านี้
git config --global rerere.enabled true git config --global rerere.autoupdate true
ตั้งค่าไฟล์ .gitignore แบบ global
- หากต้องการระบุไฟล์ที่ต้องการ ignore แบบ global ให้ตั้งค่าดังนี้
git config --global core.excludesfile ~/.gitignore
ปรับปรุงการตั้งค่า rebase
- หากต้องการให้ทำ squash และ stash อัตโนมัติระหว่าง rebase ให้ใช้การตั้งค่าต่อไปนี้
git config --global rebase.autoSquash true git config --global rebase.autoStash true git config --global rebase.updateRefs true
# เรื่องของรสนิยม
การแสดง merge conflict ที่ดีขึ้น
- หากต้องการให้แสดงเวอร์ชันฐานร่วมด้วยเมื่อเกิด merge conflict ให้พิจารณาการตั้งค่านี้
git config --global merge.conflictstyle zdiff3
ใช้ rebase ตอน pull
- หากต้องการให้
git pullทำ rebase โดยอัตโนมัติ ให้ตั้งค่าดังนี้git config --global pull.rebase true
เพิ่มความเร็วในการตรวจจับการเปลี่ยนแปลงของไฟล์
- หากต้องการเพิ่มประสิทธิภาพของ
git statusเป็นต้น สามารถใช้การตั้งค่าต่อไปนี้ได้git config --global core.fsmonitor true git config --global core.untrackedCache true
# สรุป
- การตั้งค่าเหล่านี้ช่วยให้ใช้งาน Git ได้สะดวกขึ้น และบางรายการก็เป็นการตั้งค่าที่นักพัฒนา core ใช้งานอย่างจริงจัง
- การปรับแต่งการตั้งค่า Git ให้เหมาะสมสามารถช่วยปรับปรุง workflow และทำให้ใช้งานได้มีประสิทธิภาพมากขึ้น
7 ความคิดเห็น
"สิ่งที่น่าสนใจกว่านั้นคือ คนส่วนใหญ่ในพวกคุณไม่รู้เลยด้วยซ้ำว่านี่หมายความว่าอะไร" แทงใจมากเลยครับ/ค่ะ ฮือๆๆ
ไม่ใช่
--globalแต่เป็น-globalเหรอ?--globalถูกต้องครับ มีความคลาดเคลื่อนตอนคัดลอกวาง ตอนนี้แก้ไขแล้วครับตัวเลือกการตั้งค่า Git ยอดนิยม
การนำการแก้ไข conflict กลับมาใช้ซ้ำนี่ดีมาก
เวลา diff ผมใช้
git-deltaเพื่อดูในรูปแบบ TUI อยู่ครับถ้าขี้เกียจไปหมดทุกอย่างก็ใช้
tig... ฮ่าๆๆๆมีอะไรที่ดีกว่านี้อีกไหมครับ...?
ความเห็นจาก Hacker News
git outซึ่งจะแสดงรายการ commit ทั้งหมดที่ยังไม่ได้ push ใช้ตลอดgit config --global core.pager bat