ตัวเลือกการตั้งค่า Git ยอดนิยม
(jvns.ca)-
pull.ff onlyหรือpull.rebase true- การตั้งค่าทั้งสองแบบมีไว้เพื่อป้องกันไม่ให้สร้าง merge commit โดยไม่ตั้งใจเมื่อรัน
git pullแล้ว branch แตกต่างจาก branch ต้นทาง pull.rebase trueเทียบเท่ากับการรันgit pull --rebaseทุกครั้งpull.ff onlyเทียบเท่ากับการรันgit pull --ff-onlyทุกครั้ง- ไม่มีความหมายที่จะใช้ทั้งสองพร้อมกัน เพราะ
--ff-onlyจะเขียนทับ--rebase
- การตั้งค่าทั้งสองแบบมีไว้เพื่อป้องกันไม่ให้สร้าง merge commit โดยไม่ตั้งใจเมื่อรัน
-
merge.conflictstyle zdiff3- การตั้งค่านี้ทำให้อ่าน merge conflict ได้ง่ายขึ้น
diff3เปลี่ยนวิธีแสดง merge conflict จากค่าเริ่มต้น โดยแสดงโค้ดต้นฉบับไว้ตรงกลางzdiff3เป็นเวอร์ชันที่ปรับปรุงจากdiff3และโดยทั่วไปถือว่าดีกว่า
-
rebase.autosquash true- ฟีเจอร์ที่ช่วยให้แก้ไข commit เก่าได้ง่ายขึ้น
- หาก commit ด้วย
git commit --fixup OLD_COMMIT_IDเมื่อรันgit rebase --autosquash mainระบบจะรวม commitfixup!เข้ากับเป้าหมายโดยอัตโนมัติ
-
rebase.autostash true- รัน
git stashและgit stash popให้อัตโนมัติก่อนและหลังgit rebase
- รัน
-
push.default simple,push.default current- ตั้งค่าให้ push branch ปัจจุบันไปยัง remote branch ที่มีชื่อเดียวกันโดยอัตโนมัติ
push.default simpleเป็นค่าปริยาย และจะทำงานเฉพาะเมื่อ branch นั้นติดตาม remote branch อยู่แล้วpush.default currentจะ push local branch ไปยัง remote branch ชื่อเดียวกันเสมอ
-
init.defaultBranch main- สร้าง branch
mainแทนmasterเมื่อตั้ง repository ใหม่
- สร้าง branch
-
commit.verbose true- เพิ่ม diff ของ commit ทั้งหมดใน text editor ที่ใช้เขียนข้อความ commit เพื่อช่วยให้จำได้ว่าทำอะไรไว้บ้าง
-
rerere.enabled true- จดจำว่าคุณแก้ merge conflict อย่างไรระหว่าง
git rebaseและช่วยแก้ conflict แบบอัตโนมัติ
- จดจำว่าคุณแก้ merge conflict อย่างไรระหว่าง
-
help.autocorrect 10- ฟีเจอร์ auto-correct ของ git จะตรวจจับคำสั่งที่พิมพ์ผิด แต่จะไม่รันคำสั่งที่แก้ไขแล้วโดยอัตโนมัติ
- หากต้องการให้รันอัตโนมัติ ให้ตั้ง
help.autocorrectเป็น1,10,immediateหรือprompt
-
core.pager delta- เป็น "pager" ที่ใช้แสดงผลลัพธ์ของ
git diff,git log,git showเป็นต้น - ตั้งให้ใช้
deltaซึ่งเป็นเครื่องมือดู diff ขั้นสูงที่มี syntax highlighting
- เป็น "pager" ที่ใช้แสดงผลลัพธ์ของ
-
diff.algorithm histogram- diff algorithm แบบปริยายมักมีปัญหาเมื่อมีการเปลี่ยนลำดับของฟังก์ชัน
diff.algorithm histogramจะแสดงเรื่องนี้ได้ชัดเจนกว่า
-
core.excludesfile: global .gitignore- ตั้งค่าไฟล์ gitignore แบบ global ที่ใช้กับทุก repository
-
includeIf: แยกการตั้งค่า git สำหรับงานส่วนตัวและงานบริษัท- ใช้ตั้งค่าอีเมลคนละชุดสำหรับ repository ส่วนตัวและ repository งาน
-
url."git@github.com:".insteadOf 'https://github.com/'- แทนที่
https://github.comเป็นgit@github.com:โดยอัตโนมัติ
- แทนที่
-
fsckobjects: ป้องกันข้อมูลเสียหาย- เป็นการตั้งค่าที่ช่วยตรวจจับข้อมูลเสียหายเชิงรุก และเคยช่วยทีมไว้หลายครั้ง
-
การตั้งค่าที่เกี่ยวข้องกับ submodule
status.submoduleSummary truediff.submodule logsubmodule.recurse true
-
การตั้งค่าอื่น ๆ
blame.ignoreRevsFile .git-blame-ignore-revsbranch.sort -committerdatecolor.ui falsecommit.cleanup scissorscore.autocrlf falsecore.editor emacscredential.helper osxkeychaindiff.tool difftasticdiff.colorMoved defaultdiff.colorMovedWS allow-indentation-changediff.context 10fetch.prune trueและfetch.prunetagsgpg.format sshlog.date isomerge.keepbackup falsemerge.tool meldpush.followtags truerebase.missingCommitsCheck errorrebase.updateRefs true
-
วิธีตั้งค่า
- โดยทั่วไปใช้
git config --global NAME VALUEเพื่อตั้งค่า - หากต้องการลบตัวเลือก ให้แก้ไข
~/.gitconfigด้วยตนเอง
- โดยทั่วไปใช้
-
การตั้งค่าที่เปลี่ยนหลังจากเขียนบทความนี้
diff.algorithm histogrambranch.sort -committerdatemerge.conflictstyle zdiff3
-
สรุปท้ายบท
- การถามผู้คนจำนวนมากว่าชอบการตั้งค่าอะไร แล้วรวบรวมตัวที่ถูกพูดถึงมากที่สุดมาเรียงไว้ เป็นสิ่งที่มีประโยชน์
ความเห็นของ GN⁺
- ประเด็นสำคัญที่สุดของบทความนี้คือช่วยให้รู้จักตัวเลือกการตั้งค่า git ที่นักพัฒนามักใช้กันบ่อย
- สำหรับวิศวกรซอฟต์แวร์มือใหม่ที่ใช้ git การตั้งค่าเหล่านี้สามารถช่วยเพิ่มประสิทธิภาพการทำงานและแก้ปัญหาที่เจอเป็นประจำได้
- โดยเฉพาะการตั้งค่าอย่าง
merge.conflictstyle zdiff3หรือrebase.autosquash trueที่ช่วยให้การแก้ merge conflict และการจัดการประวัติ commit ทำได้ง่ายขึ้น จึงลดปัญหาที่อาจเกิดขึ้นระหว่างการทำงานร่วมกันได้
4 ความคิดเห็น
หากต้องการลบออปชัน ก็สามารถใช้คำสั่ง
git config --global --unset NAMEได้เช่นกันถ้าต้องการตรวจสอบการตั้งค่าของตัวเอง ให้เพิ่ม
git config --listเคยมีประสบการณ์ที่ตั้งค่าไว้ในสภาพแวดล้อมพัฒนาหลักแล้ว แต่พอไปอีกสภาพแวดล้อมหนึ่งไม่ได้ตั้งค่าไว้ก็สงสัยว่าทำไมมันใช้ไม่ได้บ้างครับ 555 ในเมื่อเราเป็นนักพัฒนาและใช้ Git กันทุกวัน ก็อยากให้สนใจกันมากขึ้นกับเรื่องที่เกี่ยวข้องกับการตั้งค่า Git
ความเห็นจาก Hacker News
core.autocrlfและsafecrlfgitattributesaliasใน.gitconfigrebase.autosquashและ aliasfixuppull.rebaseก็สำคัญ แต่มีการใช้fixupบ่อยกว่าinsteadOfadvice.statusHints,include.path,remote "origin".fetch,interactive.singleKey.gitconfigส่วนตัวalias,tag,tar,log,pull,diff,difftool,pager,safe,advice,initdeltaเป็น pageruser.useConfigOnlyสำหรับการใช้อีเมลหลายแบบuser.emailออก แล้วค่อยตั้งค่าอีเมลเมื่อ commit ใน repository ใหม่merge.conflictstylediff3ให้ข้อมูลมากขึ้นในการแก้ conflictcore.commentChar,alias.newtask,alias.zip,git checkout -,format.pretty, การตั้งค่าdeltabranch.sort.gitconfigส่วนตัวalias.lg,alias.hist,alias.quick-push,alias.search,user,core,urlquick-pushได้เนื้อหาข้างต้นเป็นการสรุปการตั้งค่า
.gitconfigส่วนตัวที่ผู้ใช้แชร์กันในคอมเมนต์ของ Hacker News และทิปการตั้งค่า Git ที่พวกเขาชื่นชอบ โดยเน้นไปที่การเพิ่มประสิทธิภาพการใช้งาน Git การทำงานบางอย่างให้เป็นอัตโนมัติ และการปรับปรุงประสบการณ์ของผู้ใช้