1 คะแนน โดย GN⁺ 5 시간 전 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • การพิมพ์คำสั่ง 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 ความคิดเห็น

 
GN⁺ 5 시간 전
ความคิดเห็นจาก Lobste.rs
  • ก่อนหน้านี้ก็มี git git git git git เหมือนกัน

  • อันนี้ก็ทำได้ด้วยวิธีที่ง่ายกว่านี้:

    [aliases]  
    jj = []  
    

    ข้อเสียอย่างเดียวของรูปแบบนี้ ถ้าจำไม่ผิด คือเมื่อรันแบบไม่มีอาร์กิวเมนต์อื่นอย่าง jj jj มันจะไม่เรียก คำสั่งเริ่มต้น แบบเดียวกับ jj

    • ถ้าอย่างนั้น วิธีที่ง่ายกว่านั้นก็ไม่ได้ทำสิ่งเดียวกันจริง ๆ ไม่ใช่หรือ?
  • ว้าว เกือบ 1 ปีที่แล้ว (09/28/25) ฉันก็เคยโพสต์วิธีแก้แบบเดียวกันนี้ไว้ใน JJ Discord
    ถ้าจะทำให้การพิมพ์ผิด jj jj ... ทำงานเหมือน jj ... จริง ๆ ต้องใช้แบบนี้:

    [aliases]  
    jj = ["util", "exec", "--", "jj"]  
    

    จริง ๆ แล้วฉันค่อนข้างชอบวิธีนี้เลย

  • นี่เป็นการอ้างอิงถึง bunny party ใช่ไหม?

  • ฉันเพิ่มมันไว้ใน gist การตั้งค่า jj ที่ฉันดูแลด้วย: https://gist.github.com/pksunkara/622bc04242d402c4e43c7328234fd01c

  • แต่ถึงอย่างนั้นก็ยังอยากเห็นเวอร์ชันที่สรุปว่า Jujutsu คืออะไร และทำไมควรใช้มัน แบบ ความยาวระดับทวีต อธิบายให้เด็ก 5 ขวบฟัง
    ที่งานก่อนหน้านี้ฉันใช้ Git ทุกวันอยู่ 4 ปี และเกลียดมันมาก มันซับซ้อนเกินจำเป็นอย่างประหลาดเมื่อเทียบกับสิ่งที่เราต้องการและวิธีที่คนส่วนใหญ่ใช้งาน และสำหรับคนส่วนใหญ่ มันไม่ใช่ระบบควบคุมเวอร์ชันแบบกระจายศูนย์ แต่เป็นเครื่องมือแบบศูนย์กลางที่ยึด Github เป็นหลักมากกว่า
    เป็นเรื่องน่าขำที่ผู้ใช้ Git หลายคนไม่รู้ว่า git ในอังกฤษแบบบริติชยังหมายถึง “คนที่อารมณ์เสีย ไม่ให้ความร่วมมือ และไม่ค่อยช่วยเหลือ” ด้วย เป็นคำที่อธิบาย Git ในฐานะเครื่องมือได้ดีมาก
    แต่ฉันก็ไม่ค่อยเก่งเรื่องการเปรียบเทียบ เพราะไม่เคยใช้ระบบควบคุมเวอร์ชันอื่นเลย Jujutsu ก็หาข้อมูลใน Google ยาก และเอกสารก็ดูเหมือนเขียนสำหรับคนที่ชำนาญเรื่องระบบควบคุมเวอร์ชันมากกว่าคนแบบฉัน

    • ฉันคิดว่าเหตุผลที่ Torvalds เลือกชื่อ git ก็เพราะมันหมายถึง คนหยาบคายและอารมณ์เสีย จริง ๆ