Phát hành jj v0.43.0
(github.com/jj-vcs)- jj v0.43.0, hệ thống quản lý phiên bản tương thích Git, bổ sung
jj runđể chạy lệnh trên nhiều changeset, giúp tự động hóa tốt hơn các tác vụ kiểm tra và sửa lỗi lặp lại jj runsử dụng working copy chuyên biệt cho từng changeset, đồng thời truyền cả các thay đổi và xung đột từ những lệnh làm thay đổi working copy nhưcargo checkhaycargo fix- Bản phát hành này cũng bao gồm các thay đổi ảnh hưởng đến cách dùng cấu hình và revset hiện có, như
git_head(),git_refs(), cơ chế phân giải symbol kiểu Git, và việc loại bỏui.revsets-use-glob-by-default - Cũng được bổ sung:
jj show --reversed, tìm cấu hình trong/etc/jj,jj config gc,jj gerrit upload -o, hàm revsetforks(), và kiểu màu gạch ngang - Đã sửa các vấn đề về xử lý file identity trên Windows, snapshot của working copy bất biến, cảnh báo URL remote trùng lặp, và lỗi hỏng loose Git object trên Intel Raptor Lake và aarch64
Tổng quan bản phát hành
- jj là một hệ thống quản lý phiên bản tương thích Git, đơn giản nhưng mạnh mẽ
- Trong v0.43.0,
jj runđược thêm mới để áp dụng lệnh cho nhiều changeset - Có thể xem hướng dẫn cài đặt để bắt đầu tại installation instructions
Chạy lệnh theo từng changeset: jj run
jj runcó thể chạy cùng một lệnh trên nhiều changeset- Mỗi changeset sử dụng một working copy chuyên biệt tách biệt với nhau
- Lệnh được chạy có thể cập nhật working copy, và các thay đổi cũng như xung đột phát sinh từ đó sẽ được truyền đi phù hợp
- Ví dụ sử dụng như sau
jj run -- cargo check --all-featuresjj run -- cargo fix
Các nội dung bị loại bỏ ảnh hưởng đến khả năng tương thích
- Các hàm
git_head()vàgit_refs()đã ngừng sử dụng trong revset và template nay đã bị loại bỏ - Các symbol kiểu Git như
refs/heads/mainsẽ không còn được phân giải thành revision nữa- Thay vào đó, cần dùng cú pháp
<name>hoặc<name>@<remote>cho bookmark/tag
- Thay vào đó, cần dùng cú pháp
- Tùy chọn
ui.revsets-use-glob-by-defaultđã ngừng sử dụng nay cũng bị loại bỏ jj bookmark trackvàuntrackkhông còn hỗ trợ mẫu<kind>:<bookmark>@<remote>nữa- Cú pháp symbol
<bookmark>@<remote>vẫn tiếp tục được hỗ trợ - Vấn đề liên quan: #9226
- Cú pháp symbol
Tính năng mới được bổ sung
jj shownay hỗ trợ cờ--reversedjjcũng tìm file cấu hình trong/etc/jjjj config gcdọn dẹp cấu hình của các repository đã bị xóa hoặc di chuyển khỏi thư mục~/.config/jj/repos- Vấn đề liên quan: #9362
jj gerrit uploadhỗ trợ cờ-o/--option, hoạt động tương tựgit push -ohoặc--push-optionjj git fetchrebase các revision con của những revision đã được viết lại dựa trên change ID- Trước đây, khi có nhiều revision trong stack được gắn bookmark, revision đã viết lại và các revision con của nó không phải lúc nào cũng được rebase
- Các revision con bất biến sẽ không được rebase
- Đã thêm hàm revset
forks()- Trả về mọi commit có từ 2 commit con trở lên
- Cấu hình
colorshỗ trợ kiểu chữ gạch ngang với{ crossed-out = true }
Các vấn đề đã được sửa
- Trên Windows, khi truy vấn file identity của đường dẫn, hệ thống sẽ không còn đi theo symbolic link nữa
- Hành vi này nay thống nhất với Unix
- Trước đây, hai symbolic link trỏ tới cùng một đích có thể bị xem là cùng một file
- Kiểm tra identity này được dùng để phát hiện alias của các thư mục
.gitvà.jjđược dành riêng khi ghi working copy - Vấn đề liên quan: #8924
- Khi working copy ở trạng thái bất biến,
jjnay tạo revision working-copy mới trong lúc snapshot jj git remote addsẽ cảnh báo nếu fetch URL hoặc effective push URL của remote mới trùng khớp chính xác với remote hiện có- Vấn đề liên quan: #413
- Lỗi loose Git object bị hỏng trên CPU Intel Raptor Lake và aarch64 đã được sửa
- Trước đây,
jjcó thể báo commit thành công nhưng sau đógit fscklại thất bại vớiincorrect data check,corrupt loose object,missing blob - Sau đó, các thao tác
jjtiếp theo cũng có thể thất bại vớicorrupt deflate stream
- Trước đây,
1 bình luận
Các ý kiến trên Lobste.rs
Rất mong chờ
jj runMừng là việc ngừng hỗ trợ đã được rút lại đối với
jj bookmark track/untrack <name>@<remote>Lần nào cũng phải gõ
--remotethì lúc nào cũng hơi phiềnPhần sửa các loose Git object bị hỏng trên
Intel Raptor Lake CPUvàaarch64nghe như một lỗi thú vịNếu có bài blog liên quan thì muốn đọc thử 😃
Trước giờ tôi cứ nghĩ mọi Git object bị hỏng mà mình từng thấy đều do rollback hệ thống tệp
Sau khi tắt máy cứng, rollback f2fs thường tạo ra trạng thái đĩa khá thú vị, nên rất thú vị khi biết rằng chỉ đơn giản là có phần bị hỏng ở phía đó
Tôi tò mò
jj runkhácjj fixnhư thế nàoNgay trong ví dụ changelog cũng chạy
cargo fixbằngjj run, nên rõ ràng hai cái có vẻ chồng lấn nhaujj runtạo toàn bộ working copy rồi chạy lệnh bên trong đójj fixpipe nội dung của một file đơn lẻ vào lệnh, rồi dùng output làm nội dung mới của file đóNếu công cụ khớp tốt với
jj fix, thường như formatter hoặc linter, thì nó nhanh hơn nhiều, nhưngjj runlinh hoạt hơnrunchạy lệnh cho từng thay đổi, cònfixchạy bộ lọc trên từng file đã thay đổiTrong trường hợp của tôi, có thể dùng
runđể chạy test suite nhằm kiểm tra từng commit có hợp lệ không, rồi sau đó dùngfixđể chạy formatter trên fileTôi vẫn chưa cập nhật, đây chỉ là cách diễn giải của tôi
Tôi sẽ thử nghịch
jj runmột chút, nhưng vì cách tôi dùng direnv, khả năng cao là nó sẽ trở nên rắc rối hơn mức cần thiết