-
ทำไมฟีเจอร์แก้ไขอัตโนมัติของ Git ถึงเร็วเกินไป
- ฟีเจอร์แก้ไขอัตโนมัติของ Git จะรอ 0.1 วินาทีก่อนรันคำสั่งที่พิมพ์ผิด
- เวลานี้ใกล้เคียงกับช่วงเวลาที่มนุษย์กะพริบตา ทำให้ตอบสนองได้ยาก
- ฟีเจอร์นี้เกิดจากความเข้าใจผิดเรื่องหน่วยเวลาและการตั้งค่าที่ผิดพลาดตามข้อเสนอของผู้ดูแล Git
-
ฟีเจอร์นี้ถูกออกแบบมาอย่างไร?
- โดยปกติแล้ว Git จะไม่รันคำสั่งที่พิมพ์ผิด
- พฤติกรรมเริ่มต้นคือเสนอคำสั่งที่คล้ายกันแล้วจบการทำงาน
- ในปี 2008 Johannes Schindelin ได้เพิ่มแพตช์ที่ค้นหาและรันคำสั่งที่คล้ายกัน
- Alex Riesen ทำให้สามารถตั้งค่าพฤติกรรมนี้ได้ผ่านการตั้งค่า
help.autocorrect
- หากตั้ง
help.autocorrect เป็น 1 ระบบจะรันคำสั่งหลังจาก 0.1 วินาที
-
ค่าที่เหมาะสมสำหรับการตั้งค่าคืออะไร?
- หากตั้งเป็น
10 ระบบจะรอ 1 วินาที
- ตามเอกสาร ค่าที่ตั้งได้มีดังนี้:
0: แสดงคำสั่งที่แนะนำ
- ค่าบวก: รันคำสั่งหลังจากเวลาที่กำหนดเป็นหน่วย 0.1 วินาที
immediate: รันคำสั่งทันที
prompt: แสดงคำสั่งที่แนะนำและถามผ่านพรอมป์ต์ว่าจะให้รันหรือไม่
never: ไม่รันหรือแสดงคำสั่งที่แนะนำ
- การตั้งค่า
prompt อาจเป็นตัวเลือกที่สมเหตุสมผลที่สุด
-
Git เดาได้อย่างไร?
- Git ใช้อัลกอริทึมระยะ Levenshtein แบบดัดแปลงอย่างง่ายในการเดาคำสั่ง
- หากระยะห่างเกินค่าที่กำหนด ก็จะไม่เดา
- ตัวอย่างเช่น
git bass จะถูกเดาว่าเป็น rebase แต่ bassa จะไม่ถูกเดา
-
การแก้ไขเล็ก ๆ ของฉัน
- ผู้เขียนได้เขียนแพตช์เล็ก ๆ เพื่อให้ค่า
1 ถูกตีความว่าเป็น "ทันที"
- ผู้ดูแล Git ขอให้ตีความค่าสตริงแบบบูลีนทั้งหมดให้ถูกต้อง
- หากแพตช์นี้ถูกรวมเข้าไป Git เวอร์ชันในอนาคตจะไม่ทดสอบความเร็วในการตอบสนองของคุณอีกต่อไป
1 ความคิดเห็น
ความคิดเห็นบน Hacker News
เกร็ดเล่าว่าเมื่อ Hal Finney เขียน BASIC interpreter สำหรับระบบ Mattel Intellivision ในยุค 70 เขาเคยย่อข้อความแสดงข้อผิดพลาดเหลือแค่ "EH?" ซึ่งน่าสนใจดี
ปัญหาเกิดจากชื่อการตั้งค่าที่ไม่ชัดเจน ควรใช้ชื่อที่ชัดเจนอย่าง
help.autocorrect_enabledint timeout_msecแทนint timeoutดูเหมือนเป็นการออกแบบที่ผิดพลาด ควรหลีกเลี่ยงการเปลี่ยนความหมายของค่าการตั้งค่าที่มีอยู่เดิม
help.autocorrectถูกวัดด้วยหน่วยที่ไม่เป็นมาตรฐานนั้นไม่ดีนัก ควรตั้งค่าเป็นแบบบูลีนและทศนิยมจะเหมาะสมกว่าเป็นตัวอย่างที่ดีของ "creeping featurism" ซึ่งก่อให้เกิดความซับซ้อนที่ไม่จำเป็น
ไม่มีการพูดถึงการใช้หน่วย deciseconds ทั้งที่ xmobar ก็เจอปัญหาคล้ายกัน
ถ้าตั้งค่า
help.autocorrectเป็น 1 ระบบจะรอ 100ms แล้วทำต่อ ควรเพิ่มการตั้งค่าใหม่ขึ้นมาแทนinnodb_flush_log_at_trx_commitของ MySQL ก็มีความผิดพลาดลักษณะคล้ายกันเมื่อตั้ง autocorrect เป็น 3 วินาที มันแยกไม่ออกระหว่างพฤติกรรมที่เสี่ยงกับพฤติกรรมที่ปลอดภัย และทำให้ประวัติ shell ปนเปื้อนด้วยคำสั่งที่พิมพ์ผิด
เมื่อพิมพ์คำสั่งผิด สามารถกด ctrl-C ได้ทันทีเพื่อยกเลิกก่อนหมดเวลา 100ms
deciseconds เป็นหน่วยที่ไม่เป็นมาตรฐาน การระบุเวลาหน่วงเป็นมิลลิวินาทีหรือวินาทีเป็นเรื่องที่พบได้ทั่วไปกว่า
เวลาในการตอบสนองแตกต่างกันตามประเภทของสิ่งเร้า การได้ยินเร็วกว่าการมองเห็น และการสัมผัสเร็วที่สุด (90 - 180 ms)