1 điểm bởi GN⁺ 5 giờ trước | 1 bình luận | Chia sẻ qua WhatsApp
  • 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 run sử 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 check hay cargo 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 revset forks(), 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 run có 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-features
    • jj 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()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/main sẽ 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
  • Tùy chọn ui.revsets-use-glob-by-default đã ngừng sử dụng nay cũng bị loại bỏ
  • jj bookmark trackuntrack khô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

Tính năng mới được bổ sung

  • jj show nay hỗ trợ cờ --reversed
  • jj cũng tìm file cấu hình trong /etc/jj
  • jj config gc dọ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 upload hỗ trợ cờ -o / --option, hoạt động tương tự git push -o hoặc --push-option
  • jj git fetch rebase 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 colors hỗ 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 .git.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, jj nay tạo revision working-copy mới trong lúc snapshot
    • Trước đây, revision mới được tạo ngay sau khi working copy trở thành bất biến
    • Vấn đề liên quan: #7751, #9338
  • jj git remote add sẽ 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, jj có thể báo commit thành công nhưng sau đó git fsck lại thất bại với incorrect data check, corrupt loose object, missing blob
    • Sau đó, các thao tác jj tiếp theo cũng có thể thất bại với corrupt deflate stream

1 bình luận

 
Các ý kiến trên Lobste.rs
  • Rất mong chờ jj run

  • Mừ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õ --remote thì lúc nào cũng hơi phiền

  • Phần sửa các loose Git object bị hỏng trên Intel Raptor Lake CPUaarch64 nghe 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 run khác jj fix như thế nào
    Ngay trong ví dụ changelog cũng chạy cargo fix bằng jj run, nên rõ ràng hai cái có vẻ chồng lấn nhau

    • jj run tạo toàn bộ working copy rồi chạy lệnh bên trong đó
      jj fix pipe 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ưng jj run linh hoạt hơn
    • Theo cách tôi hiểu, run chạy lệnh cho từng thay đổi, còn fix chạy bộ lọc trên từng file đã thay đổi
      Trong 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ùng fix để chạy formatter trên file
      Tô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 run mộ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