- 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:
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 jjmà không có đối số nào khác thì nó sẽ không chạy lệnh mặc định nhưjjỒ, 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: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
gittrong 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
gitvì nó có nghĩa là một kẻ thô lỗ và cáu kỉnh