Git 2.56, hệ thống quản lý mã nguồn phân tán, đã được phát hành. Git được cấp phép theo giấy phép GPLv2+. So với phiên bản trước, phiên bản mới bao gồm 748 thay đổi do 104 nhà phát triển thực hiện, trong đó có 39 người mới tham gia phát triển Git. Các tính năng mới chính (1, 2, 3):
- Chế độ "git add --resolved" đã được thêm vào để giải quyết xung đột khi hợp nhất các nhánh. Chế độ này kiểm tra các tệp để tìm dấu hiệu xung đột và, nếu phát hiện dấu hiệu trong ít nhất một tệp, sẽ trả về lỗi, không lập chỉ mục bất kỳ tệp nào và hiển thị danh sách các tệp cần sửa chữa. Không giống như lệnh "git add --update", chế độ mới này chỉ xử lý các tệp ở trạng thái xung đột và bỏ qua các tệp đã thay đổi không liên quan đến xung đột. Điều này cho phép việc hợp nhất nhánh được hoàn tất một cách an toàn ngay cả khi có các chỉnh sửa chưa hoàn thành khác trong thư mục làm việc (lệnh "git add --update" đã thêm tất cả các tệp đã thay đổi được theo dõi trước đó trong thư mục làm việc vào chỉ mục).
- Việc làm việc với các kho lưu trữ lớn đã được tăng tốc đáng kể nhờ tối ưu hóa thuật toán tìm kiếm các commit chung gần đây nhất khi hợp nhất nhánh và so sánh commit. Quy trình hiện xem xét các commit chỉ thuộc về một nhánh duy nhất, cho phép quá trình quét dừng ngay lập tức sau khi tìm thấy tất cả các tổ tiên chung có thể có, mà không lãng phí thời gian vào việc duyệt thêm lịch sử thay đổi. Trong một kho lưu trữ được thử nghiệm, tốc độ tìm kiếm tăng trung bình 20 lần, trong khi ở một kho khác, tốc độ tăng lên đến 70 lần. Khi chạy lệnh "git merge-base --all v4.8 v4.9" trong kho lưu trữ với kernel Linux Số bước di chuyển đã giảm từ 167 nghìn xuống còn 3.8 nghìn.
- Chế độ đóng gói lại "--path-walk" đã được điều chỉnh để sử dụng trên máy chủ, cho phép tạo ra các tệp gói nhỏ gọn hơn bằng cách nhóm các đối tượng theo đường dẫn của chúng trong cây thư mục (ví dụ: đối với kho lưu trữ Fluent UI, việc sử dụng "--path-walk" đã giảm kích thước tệp gói từ 558 MB xuống còn 164 MB). Phiên bản mới hỗ trợ sử dụng chế độ "--path-walk" kết hợp với các bitmap khả năng truy cập và các đảo delta, được các dịch vụ lưu trữ Git sử dụng để tăng tốc công việc và cô lập các nhánh khỏi kho lưu trữ chính.
- Các điểm nghẽn gây ra các phép tính dư thừa trong các kho lưu trữ lớn đã được loại bỏ: các kiểm tra trạng thái tệp không cần thiết khi ghi vào bảng tham chiếu đã được loại bỏ; việc quét lại danh sách đã được loại bỏ cho mỗi lần chèn tệp gói mới; các thao tác trên bảng tham chiếu với các bản ghi xóa lớn tích lũy đã được tăng tốc; hiệu suất của lệnh git diff đã được tối ưu hóa khi chỉ định các hạn chế về đường dẫn tệp. Sau những tối ưu hóa này, các thao tác trên bảng tham chiếu với số lượng lớn các bản ghi bị xóa đã được tăng tốc gấp 65 lần (từ 13 giây xuống còn 0.2 giây), và lệnh git diff gây ra sự cố trong kho lưu trữ Chromium với 500000 mục trong chỉ mục hiện chỉ mất 0.07 giây thay vì 8 phút.
- Lệnh thử nghiệm "git history", cho phép ghi đè lịch sử thay đổi, đã được cập nhật để bao gồm thao tác "git history drop" nhằm xóa commit đã chọn và tự động gắn các commit con của nó vào commit cha.
- Lệnh "git branch --delete-merged 'origin/*' 'topic-*'" đã được thêm vào để xóa an toàn các nhóm nhánh cục bộ mà các thay đổi của chúng đã được cam kết vào kho lưu trữ bên ngoài. Có thể sử dụng ký tự đại diện để lọc các nhánh và kho lưu trữ. Cờ "--dry-run" có thể được sử dụng để phân tích các ứng viên xóa mà không thực sự thực hiện thao tác.
- Đã thêm lệnh "git refs create|update|delete|rename", kết hợp các thao tác cấp thấp để tạo, xóa, đổi tên và cập nhật các tham chiếu.
- Lệnh "git bisect run" hiện có thêm tùy chọn "--reset-when-found=[". ]", lệnh này tự động đưa kho lưu trữ về trạng thái trước khi quá trình tìm kiếm bắt đầu, hoặc giữ nguyên commit gây lỗi mà không cần phải chạy lệnh "git bisect reset" riêng biệt.
- Lệnh 'git replay' hiện có thêm cờ '--linearize' để sử dụng cấu trúc hợp nhất phẳng, tương tự như 'git rebase --no-rebase-merges' nhưng không truy cập vào cây làm việc.
- Lệnh "git log --follow" hiện theo dõi việc đổi tên tệp trong lịch sử commit không tuyến tính, chẳng hạn như khi hợp nhất các nhánh con. Đường dẫn tệp hiện được ghi lại riêng cho mỗi commit cha, làm cho kết quả không phụ thuộc vào thứ tự duyệt qua lịch sử commit.
- Đã thêm khả năng sử dụng lệnh "git repack -a --filter=blob:limit=1m --drop-filtered" để loại bỏ các blob lớn được tải xuống theo yêu cầu từ kho lưu trữ bên ngoài mà không được sử dụng trong chỉ mục hiện tại. Các đối tượng này sẽ được tự động tải xuống lại khi được truy cập trong tương lai.
- Lệnh "git log --graph" dành cho đồ thị có nhiều gốc độc lập giờ đây sẽ thêm thụt lề để phân tách rõ ràng các commit không liên quan.
- Các lỗi chính tả thường gặp, chẳng hạn như chỉ định "git push origin/main" thay vì "git push origin main" hoặc "git branch --set-upstream-to origin main" thay vì "git branch --set-upstream-to=origin/main", hiện đã được phát hiện và một gợi ý sẽ được hiển thị về cách sử dụng biến thể chính xác.
Nguồn: opennet.ru
