Phát hành jj v0.42.0 - Hệ thống quản lý phiên bản tương thích Git
(github.com/jj-vcs)- Chuyển sang bộ cấp phát bộ nhớ mimalloc để cải thiện hiệu năng đa luồng
- Loại bỏ các tùy chọn lệnh dự kiến bị khai tử như
jj commit --reset-author/--author,jj describe --no-edit/--edit/--reset-author/--author - Loại bỏ các tùy chọn
jj git push --allow-new,jj metaedit --update-committer-timestamp - Loại bỏ các tùy chọn cấu hình dự kiến bị khai tử như
git.auto-local-bookmark,git.push-new-bookmarks jj evologngừng hỗ trợ predecessor của commit legacy được ghi trướcjj0.30- Tự động hoàn tất shell hiển thị mô tả cho alias, revset-alias, template-alias, fileset-alias do người dùng tùy biến, đồng thời trích xuất mô tả từ trường
.doctrong định nghĩa alias dạng bảng jj shownhận nhiều revision và hiển thị từng revision theo thứ tự, gần vớigit showhơnjj git fetchtạo evolution history dựa trên change ID, và nếu remote giữ nguyên change ID thì sẽ rebase các revision descendant cục bộ lên parent đã được viết lại- Lệnh
jj util backend namexuất ra tên backend commit mà kho hiện tại đang sử dụng - Thêm cấu hình
edit-invocation-modecho diff editor; khi đặt"file-by-file", trình soạn thảo sẽ được chạy một lần cho mỗi tệp thay đổi, cho phép dùng các công cụ theo từng tệp nhưvimdiff jj git remote addbáo lỗi thay vì panic khi tên remote rỗng hoặc chứa khoảng trắng- Ở trạng thái tắt xuất màu, color-words diff hiển thị before/after trên các dòng riêng để cải thiện khả năng đọc của diff khi dùng pipe hoặc redirect
1 bình luận
Ý kiến trên Lobste.rs
Nếu
jj git fetchgiờ tạo ra lịch sử tiến hóa dựa trên change ID, thì nếu remote giữ nguyên change ID, có phải sẽ không cần chạyjj new mainngay sau mỗi lầnjj git fetchnữa không?Nếu vậy thì có vẻ là một cải thiện chất lượng trải nghiệm khá tốt
main, nên có lẽ chuyện đó không giúp được phần nàyChỉ là tôi không rõ với merge commit do GitHub tạo mà không có change ID thì sẽ thế nào
Tôi tò mò hơn về đoạn nói rằng đã đổi sang allocator bộ nhớ
mimallocđể tăng hiệu năng đa luồngVới các tiến trình chạy lâu, tôi từng thử dùng thứ như
jemallocđể giảm phân mảnh, nhưngjjcó cảm giác khởi động trong 1ms và kết thúc trong vòng 10ms, nên khá bất ngờ khi việc đổi allocator lại tạo ra khác biệt có thể cảm nhận đượcTìm thêm thì tôi thấy PR là https://github.com/jj-vcs/jj/pull/9484 và chỉ tìm được thêm https://github.com/jj-vcs/jj/issues/2490#issuecomment-2595323515, nhưng không có vẻ là cải thiện tốc độ quá lớn. Dù vậy, nếu nhanh hơn và chỉ cần đổi vài dòng thì cũng ổn
Có nói là “nếu remote giữ nguyên change ID”, nhưng thường thì tôi không biết remote có giữ nguyên thứ đó hay không
Tôi biết
jj gerrit uploadsẽ thêm footer change ID, nhưngjj git pushthông thường thì không làm vậyTuy nhiên, các thao tác viết lại commit như squash merge hay rebase merge của GitHub thì sẽ không giữ lại. Nếu xử lý bằng công cụ chuẩn dựa trên
libgit2thì custom header sẽ không được giữ, còn một số công cụ như thư viện Rust mà GitButler dùng thì có hỗ trợ giữ custom header, nhưng không rõ các forge có dùng mấy thứ đó hay khôngTôi cũng không biết phải kiểm tra thế nào để xác nhận là nó thực sự đang được giữ nguyên
Tài liệu có thông tin chi tiết hơn
GitHub cũng giữ, có thể kiểm tra qua commit của pushcx trong codebase lobsters hoặc commit của tôi
Tôi đang tự hỏi liệu có tài liệu nào đáng đọc hoặc xem về lý do nên dùng jj thay cho Git chuẩn không
Tôi biết jj có thể chạy trên Git và cũng đã thử nghiệm nó trong vài dự án cá nhân, nhưng vẫn chưa thực sự thấy được điểm hấp dẫn mang tính quyết định về việc vì sao nó tốt hơn hoặc dễ hơn