59 คะแนน โดย GN⁺ 2024-02-17 | 4 ความคิดเห็น | แชร์ทาง WhatsApp
  • 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.conflictstyle zdiff3

    • การตั้งค่านี้ทำให้อ่าน merge conflict ได้ง่ายขึ้น
    • diff3 เปลี่ยนวิธีแสดง merge conflict จากค่าเริ่มต้น โดยแสดงโค้ดต้นฉบับไว้ตรงกลาง
    • zdiff3 เป็นเวอร์ชันที่ปรับปรุงจาก diff3 และโดยทั่วไปถือว่าดีกว่า
  • rebase.autosquash true

    • ฟีเจอร์ที่ช่วยให้แก้ไข commit เก่าได้ง่ายขึ้น
    • หาก commit ด้วย git commit --fixup OLD_COMMIT_ID เมื่อรัน git rebase --autosquash main ระบบจะรวม commit fixup! เข้ากับเป้าหมายโดยอัตโนมัติ
  • 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 ใหม่
  • commit.verbose true

    • เพิ่ม diff ของ commit ทั้งหมดใน text editor ที่ใช้เขียนข้อความ commit เพื่อช่วยให้จำได้ว่าทำอะไรไว้บ้าง
  • rerere.enabled true

    • จดจำว่าคุณแก้ merge conflict อย่างไรระหว่าง git rebase และช่วยแก้ 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
  • 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 true
    • diff.submodule log
    • submodule.recurse true
  • การตั้งค่าอื่น ๆ

    • blame.ignoreRevsFile .git-blame-ignore-revs
    • branch.sort -committerdate
    • color.ui false
    • commit.cleanup scissors
    • core.autocrlf false
    • core.editor emacs
    • credential.helper osxkeychain
    • diff.tool difftastic
    • diff.colorMoved default
    • diff.colorMovedWS allow-indentation-change
    • diff.context 10
    • fetch.prune true และ fetch.prunetags
    • gpg.format ssh
    • log.date iso
    • merge.keepbackup false
    • merge.tool meld
    • push.followtags true
    • rebase.missingCommitsCheck error
    • rebase.updateRefs true
  • วิธีตั้งค่า

    • โดยทั่วไปใช้ git config --global NAME VALUE เพื่อตั้งค่า
    • หากต้องการลบตัวเลือก ให้แก้ไข ~/.gitconfig ด้วยตนเอง
  • การตั้งค่าที่เปลี่ยนหลังจากเขียนบทความนี้

    • diff.algorithm histogram
    • branch.sort -committerdate
    • merge.conflictstyle zdiff3
  • สรุปท้ายบท

    • การถามผู้คนจำนวนมากว่าชอบการตั้งค่าอะไร แล้วรวบรวมตัวที่ถูกพูดถึงมากที่สุดมาเรียงไว้ เป็นสิ่งที่มีประโยชน์

ความเห็นของ GN⁺

  • ประเด็นสำคัญที่สุดของบทความนี้คือช่วยให้รู้จักตัวเลือกการตั้งค่า git ที่นักพัฒนามักใช้กันบ่อย
  • สำหรับวิศวกรซอฟต์แวร์มือใหม่ที่ใช้ git การตั้งค่าเหล่านี้สามารถช่วยเพิ่มประสิทธิภาพการทำงานและแก้ปัญหาที่เจอเป็นประจำได้
  • โดยเฉพาะการตั้งค่าอย่าง merge.conflictstyle zdiff3 หรือ rebase.autosquash true ที่ช่วยให้การแก้ merge conflict และการจัดการประวัติ commit ทำได้ง่ายขึ้น จึงลดปัญหาที่อาจเกิดขึ้นระหว่างการทำงานร่วมกันได้

4 ความคิดเห็น

 
pril1 2024-02-23

หากต้องการลบออปชัน ก็สามารถใช้คำสั่ง git config --global --unset NAME ได้เช่นกัน

 
rumbarum 2024-02-21

ถ้าต้องการตรวจสอบการตั้งค่าของตัวเอง ให้เพิ่ม git config --list

 
pmc7777 2024-02-18

เคยมีประสบการณ์ที่ตั้งค่าไว้ในสภาพแวดล้อมพัฒนาหลักแล้ว แต่พอไปอีกสภาพแวดล้อมหนึ่งไม่ได้ตั้งค่าไว้ก็สงสัยว่าทำไมมันใช้ไม่ได้บ้างครับ 555 ในเมื่อเราเป็นนักพัฒนาและใช้ Git กันทุกวัน ก็อยากให้สนใจกันมากขึ้นกับเรื่องที่เกี่ยวข้องกับการตั้งค่า Git

 
GN⁺ 2024-02-17
ความเห็นจาก Hacker News
  • การตั้งค่า core.autocrlf และ safecrlf
    • ป้องกันการ commit ไฟล์แบบ CRLF และบังคับแปลงเป็น LF
    • หากจำเป็นสามารถ override ได้ด้วย gitattributes
  • การตั้งค่า alias ใน .gitconfig
    • ตั้ง alias สำหรับแสดงประวัติ commit เป็นกราฟแบบกระชับ
    • เป็นการตั้งค่าที่นำมาจากโพสต์ใน Stack Overflow
  • rebase.autosquash และ alias fixup
    • เป็นการตั้งค่าที่ใช้บ่อยเพื่อทำ rebase อัตโนมัติหลัง commit
    • pull.rebase ก็สำคัญ แต่มีการใช้ fixup บ่อยกว่า
  • ประโยชน์ของการตั้งค่า insteadOf
    • ใช้ตัวย่อเมื่อเพิ่ม GitHub remote
    • มีการกล่าวถึงการตั้งค่าหลากหลาย เช่น advice.statusHints, include.path, remote "origin".fetch, interactive.singleKey
  • ตัวอย่างการตั้งค่า .gitconfig ส่วนตัว
    • มีการตั้งค่าหลากหลายสำหรับ alias, tag, tar, log, pull, diff, difftool, pager, safe, advice, init
  • การตั้งค่าให้ใช้ delta เป็น pager
    • ทำให้การแสดง diff อ่านง่ายขึ้นและมี syntax highlighting
    • เพิ่ม alias สำหรับ checkout ไปยัง branch เริ่มต้น
  • การตั้งค่า user.useConfigOnly สำหรับการใช้อีเมลหลายแบบ
    • คอมเมนต์ user.email ออก แล้วค่อยตั้งค่าอีเมลเมื่อ commit ใน repository ใหม่
  • ความจำเป็นในการเปลี่ยนค่าเริ่มต้นของ merge.conflictstyle
    • สไตล์ diff3 ให้ข้อมูลมากขึ้นในการแก้ conflict
  • การตั้งค่าเพิ่มเติม
    • core.commentChar, alias.newtask, alias.zip, git checkout -, format.pretty, การตั้งค่า delta
  • ความเข้าใจผิดเกี่ยวกับการตั้งค่า branch.sort
    • ที่จริงแล้วเรียงตามวันที่ของ commit ไม่ใช่ branch ที่ถูกใช้งานล่าสุด
  • อีกตัวอย่างของการตั้งค่า .gitconfig ส่วนตัว
    • มีการตั้งค่า alias.lg, alias.hist, alias.quick-push, alias.search, user, core, url
    • สามารถกำหนด workflow แบบง่ายผ่าน alias quick-push ได้

เนื้อหาข้างต้นเป็นการสรุปการตั้งค่า .gitconfig ส่วนตัวที่ผู้ใช้แชร์กันในคอมเมนต์ของ Hacker News และทิปการตั้งค่า Git ที่พวกเขาชื่นชอบ โดยเน้นไปที่การเพิ่มประสิทธิภาพการใช้งาน Git การทำงานบางอย่างให้เป็นอัตโนมัติ และการปรับปรุงประสบการณ์ของผู้ใช้