- การพิมพ์คำสั่ง
jj ซ้ำโดยเผลอเล็กน้อยอาจนำไปสู่ ข้อผิดพลาดของซับคอมมานด์ แต่สามารถดูดซับได้ด้วยการตั้งค่า alias ของ jj
- ตัวอย่างคือกรณีที่
jj jj show -T 'change_id.short()' ซึ่งตั้งใจจะดึง ID แบบสั้นของ changeset ที่กำลังแก้ไขอยู่ ล้มเหลว
jj สามารถกำหนด alias ในไฟล์คอนฟิกได้เหมือน git ดังนั้นจึงสามารถใช้ jj util exec เพื่อส่งคำสั่งที่เหลือกลับไปให้ jj อีกครั้งได้
- alias แบบตรงไปตรงมาจะทำให้
-T ถูกตีความเป็นออปชันของ jj util exec แทนที่จะเป็นของคำสั่งที่ต้องการรัน จึงต้องใช้ -- เพื่อหยุดการ parse อาร์กิวเมนต์
- หากใช้คอนฟิกสุดท้าย
jj = ["util", "exec", "--", "jj"] ไม่เพียงแต่ jj jj show เท่านั้น แต่ jj jj jj... show ที่ซ้อนหลายชั้นก็จะแสดง changeset ID เดียวกันได้
jj ที่พิมพ์ซ้ำทำให้ล้มเหลวด้วยข้อผิดพลาดของซับคอมมานด์
- ระหว่างใช้
jj ถ้าพิมพ์ jj เพิ่มมาอีกตัวในบรรทัดคำสั่ง jj ตัวที่สองจะถูกตีความเป็นซับคอมมานด์และทำให้ล้มเหลว
- ตัวอย่างคือคำสั่งที่ต้องการดึง ID แบบสั้นของ changeset ที่กำลังแก้ไขอยู่
$ jj jj show -T 'change_id.short()'
error: unrecognized subcommand 'jj'
Usage: jj [OPTIONS] <COMMAND>
For more information, try '--help'.
- แม้จะเลี่ยงได้ด้วย shell alias แต่ก็สามารถใช้ alias ในคอนฟิกของ
jj เองได้
- ใช้
jj config edit เพื่อแก้ไขคอนฟิก
- ใช้
jj config set เพื่อเปลี่ยนคอนฟิกจาก shell
ใช้ -- ใน jj util exec เพื่อคงการส่งต่ออาร์กิวเมนต์
- ความพยายามครั้งแรกคือให้ alias เรียก
jj อีกครั้งผ่าน jj util exec
[aliases]
# jj all the way down
jj = ["util", "exec", "jj"]
- แต่ในการตั้งค่านี้
-T จะถูกตีความเป็น ออปชันของ jj util exec ไม่ใช่ของ jj ที่เป็นเป้าหมายการรัน จึงล้มเหลว
$ jj jj show -T 'change_id.short()'
error: unexpected argument '-T' found
tip: to pass '-T' as a value, use '-- -T'
Usage: jj util exec [OPTIONS] <COMMAND> [ARGS]...
For more information, try '--help'.
- เมื่อใส่
-- จะหยุดการ parse ออปชันหลังจากนั้น และส่งอาร์กิวเมนต์ที่เหลือไปยังคำสั่งเป้าหมายตามเดิม
[aliases]
# jj all the way down
jj = ["util", "exec", "--", "jj"]
- หลังตั้งค่าขั้นสุดท้ายแล้ว ทั้ง
jj show ปกติ, jj jj show แบบซ้อน, และ jj jj jj ... show ที่พิมพ์ซ้ำมากกว่านั้น จะพิมพ์ changeset ID แบบสั้นเดียวกันทั้งหมด
$ jj show -T 'change_id.short()'
upvqxuzzvxtx
$ jj jj show -T 'change_id.short()'
upvqxuzzvxtx
$ jj jj jj jj jj show -T 'change_id.short()'
upvqxuzzvxtx
$ jj jj jj jj jj jj jj jj jj jj jj jj jj jj jj jj jj show -T 'change_id.short()'
upvqxuzzvxtx
1 ความคิดเห็น
ความคิดเห็นจาก Lobste.rs
ก่อนหน้านี้ก็มี git git git git git เหมือนกัน
อันนี้ก็ทำได้ด้วยวิธีที่ง่ายกว่านี้:
ข้อเสียอย่างเดียวของรูปแบบนี้ ถ้าจำไม่ผิด คือเมื่อรันแบบไม่มีอาร์กิวเมนต์อื่นอย่าง
jj jjมันจะไม่เรียก คำสั่งเริ่มต้น แบบเดียวกับjjว้าว เกือบ 1 ปีที่แล้ว (09/28/25) ฉันก็เคยโพสต์วิธีแก้แบบเดียวกันนี้ไว้ใน JJ Discord
ถ้าจะทำให้การพิมพ์ผิด
jj jj ...ทำงานเหมือนjj ...จริง ๆ ต้องใช้แบบนี้:จริง ๆ แล้วฉันค่อนข้างชอบวิธีนี้เลย
นี่เป็นการอ้างอิงถึง bunny party ใช่ไหม?
ฉันเพิ่มมันไว้ใน gist การตั้งค่า jj ที่ฉันดูแลด้วย: https://gist.github.com/pksunkara/622bc04242d402c4e43c7328234fd01c
แต่ถึงอย่างนั้นก็ยังอยากเห็นเวอร์ชันที่สรุปว่า Jujutsu คืออะไร และทำไมควรใช้มัน แบบ ความยาวระดับทวีต อธิบายให้เด็ก 5 ขวบฟัง
ที่งานก่อนหน้านี้ฉันใช้ Git ทุกวันอยู่ 4 ปี และเกลียดมันมาก มันซับซ้อนเกินจำเป็นอย่างประหลาดเมื่อเทียบกับสิ่งที่เราต้องการและวิธีที่คนส่วนใหญ่ใช้งาน และสำหรับคนส่วนใหญ่ มันไม่ใช่ระบบควบคุมเวอร์ชันแบบกระจายศูนย์ แต่เป็นเครื่องมือแบบศูนย์กลางที่ยึด Github เป็นหลักมากกว่า
เป็นเรื่องน่าขำที่ผู้ใช้ Git หลายคนไม่รู้ว่า
gitในอังกฤษแบบบริติชยังหมายถึง “คนที่อารมณ์เสีย ไม่ให้ความร่วมมือ และไม่ค่อยช่วยเหลือ” ด้วย เป็นคำที่อธิบาย Git ในฐานะเครื่องมือได้ดีมากแต่ฉันก็ไม่ค่อยเก่งเรื่องการเปรียบเทียบ เพราะไม่เคยใช้ระบบควบคุมเวอร์ชันอื่นเลย Jujutsu ก็หาข้อมูลใน Google ยาก และเอกสารก็ดูเหมือนเขียนสำหรับคนที่ชำนาญเรื่องระบบควบคุมเวอร์ชันมากกว่าคนแบบฉัน
gitก็เพราะมันหมายถึง คนหยาบคายและอารมณ์เสีย จริง ๆ