1 điểm bởi GN⁺ 5 giờ trước | 1 bình luận | Chia sẻ qua WhatsApp
  • Một lỗi nhỏ khi gõ lặp lại lệnh jj có thể dẫn đến lỗi subcommand, nhưng có thể hấp thụ nó bằng bí danh cấu hình của jj
  • Ví dụ là tình huống jj jj show -T 'change_id.short()' thất bại khi muốn lấy ID ngắn của changeset đang được chỉnh sửa
  • jj cũng có thể định nghĩa alias trong file cấu hình như git, và có thể chuyển phần lệnh còn lại trở lại jj bằng jj util exec
  • Alias đơn giản sẽ khiến -T được hiểu như tùy chọn của jj util exec chứ không phải của lệnh cần chạy, nên cần ngắt việc phân tích đối số bằng --
  • Nếu dùng cấu hình cuối cùng jj = ["util", "exec", "--", "jj"], không chỉ jj jj show mà cả jj jj jj... show lồng nhiều lần cũng sẽ in ra cùng một changeset ID

jj bị gõ lặp lại làm thất bại với lỗi subcommand

  • Khi đang dùng jj, nếu nhập thêm một jj nữa trên dòng lệnh thì jj thứ hai sẽ được hiểu là subcommand và thất bại
    • Ví dụ là lệnh muốn lấy ID ngắn của changeset đang được chỉnh sửa
$ jj jj show -T 'change_id.short()'
error: unrecognized subcommand 'jj'
Usage: jj [OPTIONS] <COMMAND>
For more information, try '--help'.
  • Cũng có thể lách bằng shell alias, nhưng có thể dùng alias ngay trong cấu hình của jj
    • Có thể dùng jj config edit để chỉnh sửa cấu hình
    • Nếu muốn thay đổi cấu hình từ shell thì có thể dùng jj config set

Cố định việc truyền đối số bằng -- trong jj util exec

  • Thử nghiệm đầu tiên là chạy lại jj từ alias bằng jj util exec
[aliases]


# jj all the way down
jj = ["util", "exec", "jj"]
  • Với cấu hình này, -T sẽ được hiểu như tùy chọn của jj util exec chứ không phải của jj được thực thi, nên bị lỗi
$ 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'.
  • Nếu thêm -- thì việc phân tích tùy chọn sẽ dừng lại tại đó và các đối số còn lại sẽ được truyền nguyên vẹn cho lệnh đích
[aliases]


# jj all the way down
jj = ["util", "exec", "--", "jj"]
  • Sau khi áp dụng cấu hình cuối cùng, jj show bình thường, jj jj show lồng thêm, và cả jj jj jj ... show lặp nhiều lần đều sẽ in ra cùng một ID ngắn của changeset
$ 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 bình luận

 
Ý kiến trên Lobste.rs
  • Trước đây cũng đã có git git git git git

  • Cái này cũng có thể làm bằng cách đơn giản hơn:

    [aliases]  
    jj = []  
    

    Nhược điểm duy nhất của dạng này, nếu tôi nhớ không nhầm, là khi chạy như jj jj mà không có đối số nào khác thì nó sẽ không chạy lệnh mặc định như jj

    • Nếu vậy thì chẳng phải cách đơn giản hơn đó thực ra không làm đúng cùng một việc sao?
  • Ồ, gần như 1 năm trước (09/28/25) tôi đã đăng cùng giải pháp này trên JJ Discord
    Để lỗi gõ jj jj ... hoạt động như jj ..., thực ra cần cái này:

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

    Thật ra tôi khá thích cách này

  • Đây có phải là một tham chiếu đến bunny party không?

  • Tôi cũng đã thêm vào gist cấu hình jj mà tôi quản lý: https://gist.github.com/pksunkara/622bc04242d402c4e43c7328234fd01c

  • Dù vậy, tôi vẫn muốn xem một phiên bản tóm tắt dài cỡ tweet, giải thích như cho trẻ 5 tuổi về Jujutsu là gì và tại sao nên dùng nó
    Ở công việc trước, tôi dùng Git hằng ngày suốt 4 năm và thực sự ghét nó. Nó kỳ quặc đến mức phức tạp quá mức so với những gì chúng tôi cần và cách mà đa số mọi người sử dụng, và với phần lớn mọi người thì nó không phải là một hệ thống quản lý phiên bản phân tán mà là một công cụ dựa trên máy chủ tập trung xoay quanh Github
    Khá buồn cười là nhiều người dùng Git không biết rằng git trong tiếng Anh Anh còn có nghĩa là “một người cáu kỉnh, thiếu hợp tác và chẳng giúp ích gì”. Mô tả đó khá đúng với Git như một công cụ
    Tuy nhiên tôi chưa từng dùng hệ thống quản lý phiên bản nào khác nên rất yếu ở khoản so sánh. Jujutsu cũng khó tìm kiếm trên Google, và tài liệu của nó có vẻ phù hợp với người dùng quản lý phiên bản thành thạo hơn là kiểu người như tôi

    • Tôi nghĩ Torvalds thực sự chọn tên git vì nó có nghĩa là một kẻ thô lỗ và cáu kỉnh