Bản phát hành kiểm soát nguồn Git 2.37

Bản phát hành Git 2.37 của hệ thống kiểm soát nguồn phân tán được giới thiệu. Git là một trong những hệ thống kiểm soát phiên bản phổ biến, đáng tin cậy và hiệu năng cao cung cấp các công cụ phát triển phi tuyến tính linh hoạt dựa trên việc phân nhánh và hợp nhất các nhánh. Để đảm bảo tính toàn vẹn của lịch sử và khả năng chống lại những thay đổi "lỗi thời", hàm băm ngầm định của toàn bộ lịch sử trước đó trong mỗi lần xác nhận được sử dụng, cũng có thể xác minh các thẻ và cam kết riêng lẻ bằng chữ ký điện tử của nhà phát triển.

So với bản phát hành trước, 395 thay đổi đã được chấp nhận trong phiên bản mới, được chuẩn bị với sự tham gia của 75 nhà phát triển, trong đó 20 người lần đầu tiên tham gia phát triển. Những đổi mới chính:

  • Cơ chế của các chỉ mục một phần (chỉ mục thưa thớt), chỉ bao gồm một phần của kho lưu trữ, đã sẵn sàng để sử dụng rộng rãi. Chỉ mục một phần có thể cải thiện hiệu suất và tiết kiệm không gian trong các kho thực hiện các hoạt động nhân bản một phần (thanh toán thưa thớt) hoặc hoạt động trên một bản sao một phần của kho. Trong bản phát hành mới, công việc đã được hoàn thành để tích hợp các chỉ mục một phần vào các lệnh "git show", "gitsparse-checkout" và "git stash". Hiệu suất đạt được đáng chú ý nhất từ ​​việc sử dụng các chỉ mục một phần là trong lệnh "git stash", nhanh hơn tới 80% trong một số trường hợp.
  • Cơ chế "gói hành trình" mới đã được triển khai để đóng gói các đối tượng không thể truy cập được không được tham chiếu trong kho lưu trữ (nhánh hoặc thẻ không được tham chiếu). Các đối tượng không thể truy cập được bộ thu gom rác loại bỏ, nhưng vẫn ở trong kho lưu trữ trong một thời gian nhất định trước khi loại bỏ để tránh các điều kiện cạnh tranh. Để theo dõi khoảng thời gian của các đối tượng không thể truy cập, cần phải gắn nhãn cho chúng với thời gian thay đổi của các đối tượng tương tự, điều này không cho phép lưu trữ chúng trong một tệp gói, trong đó tất cả các đối tượng đều có thời gian thay đổi chung. Trước đây, việc lưu từng đối tượng trong một tệp riêng biệt đã dẫn đến sự cố khi có một số lượng lớn đối tượng mới, không thể truy cập được và chưa bị xóa. Cơ chế "gói hành trình" được đề xuất cho phép bạn lưu trữ tất cả các đối tượng không thể truy cập được trong một tệp gói và phản ánh dữ liệu về thời gian sửa đổi của từng đối tượng trong một bảng riêng biệt được lưu trữ trong một tệp có phần mở rộng ".mtimes".
  • Đối với Windows và macOS, có một cơ chế tích hợp để theo dõi các thay đổi trong hệ thống tệp, giúp loại bỏ nhu cầu liệt kê toàn bộ thư mục làm việc khi thực hiện các thao tác như "trạng thái git". Trước đây, để theo dõi các thay đổi thông qua hook, các tiện ích theo dõi thay đổi hệ thống tệp bên ngoài, chẳng hạn như Watchman, có thể được kết nối, nhưng điều này yêu cầu cài đặt các chương trình và cấu hình bổ sung. Chức năng này hiện đã được tích hợp sẵn và có thể được bật bằng lệnh "git config core.fsmonitor true".
  • Lệnh "gitsparse-checkout" không còn hỗ trợ cho chế độ thay thế cho chế độ "-cone" xác định các mẫu để sao chép một phần, cho phép, khi xác định phần của kho lưu trữ chịu thao tác sao chép, liệt kê các tệp riêng lẻ bằng cách sử dụng lệnh " Cú pháp .gitignore", không cho phép sử dụng các chỉ mục một phần để tối ưu hóa.
  • Cải thiện tính linh hoạt trong việc định cấu hình lệnh gọi fsync() để xóa các thay đổi vào đĩa. Hỗ trợ cho chiến lược đồng bộ hóa "lô" đã được thêm vào tham số "core.fsyncMethod", giúp tăng tốc công việc khi ghi một số lượng lớn các tệp riêng lẻ bằng cách tích lũy các thay đổi trong bộ đệm ghi lại được xóa bằng một lệnh gọi fsync(). Một thử nghiệm dẫn đến 500 tệp được thêm vào lệnh git add đã hoàn thành trong 0.15 giây với chế độ mới được bật, trong khi phải mất 1.88 giây cho mỗi tệp với fsync() và 0.06 giây nếu không sử dụng fsync .
  • Các lệnh truyền tải như "git log" và "git rev-list" hiện có tùy chọn " --since-as-filter=X" để lọc thông tin về các xác nhận cũ hơn "X". Không giống như tùy chọn “-since”, lệnh mới được triển khai dưới dạng bộ lọc không dừng tìm kiếm sau lần xác nhận đầu tiên cũ hơn thời gian đã chỉ định.
  • Trong lệnh "git remote", khi chỉ định cờ "-v", thông tin về các bản sao một phần của kho lưu trữ sẽ được cung cấp.
  • Đã thêm cài đặt "transfer.credentialsInUrl", có thể nhận các giá trị "cảnh báo", "chết" và "cho phép". Nếu được chỉ định trong tệp "remote. .url" ở dạng văn bản rõ ràng, nỗ lực thực hiện thao tác "tìm nạp" hoặc "đẩy" sẽ không thành công nếu cài đặt "transfer.credentialsInUrl" được đặt thành "chết" hoặc cảnh báo nếu được đặt thành "cảnh báo".
  • Theo mặc định, một triển khai mới của chế độ tương tác của lệnh "git add -i", được viết lại từ Perl sang C, được sử dụng.

Nguồn: opennet.ru

Thêm một lời nhận xét