git 2.7 (Q4 2015) sẽ giới thiệu phân loại chi nhánh bằng cách sử dụng trực tiếp git branch
:
Xem cam kết aa3bc55 , cam kết aedcb7d , cam kết 1511b22 , cam kết f65f139 , ... (23 tháng 9 năm 2015), cam kết aedcb7d , cam kết 1511b22 , cam kết ca41799 (24 tháng 9 năm 2015) cam kết f65f139 , ... (23 tháng 9 năm 2015) bởi Karthik Nayak ( KarthikNayak
) .
(Được hợp nhất bởi Junio C Hamano - gitster
- trong cam kết 7f11b48 , ngày 15 tháng 10 năm 2015)
Cụ thể, cam kết aedcb7d :
branch.c
: sử dụng ref-filter
API ''
Tạo API ' branch.c
' sử dụng ' ref-filter
' để lặp qua sắp xếp ref. Điều này loại bỏ hầu hết các mã được sử dụng trong ' branch.c
' thay thế nó bằng các cuộc gọi đến ref-filter
thư viện ''.
Nó thêm tùy chọn--sort=<key>
:
Sắp xếp dựa trên khóa đã cho.
Tiền tố -
để sắp xếp theo thứ tự giảm dần của giá trị.
Bạn có thể sử dụng --sort=<key>
tùy chọn nhiều lần, trong trường hợp đó, khóa cuối cùng trở thành khóa chính.
Các phím được hỗ trợ giống như cácgit for-each-ref
phím trong .
Sắp xếp thứ tự mặc định để sắp xếp dựa trên tên đầy đủ (bao gồm refs/...
tiền tố). Danh sách này tách ra ĐẦU (nếu có) trước, sau đó là các nhánh cục bộ và cuối cùng là các nhánh theo dõi từ xa.
Đây:
git branch --sort=-committerdate
Hoặc (xem bên dưới với Git 2.19)
# if you are sure to /always/ want to see branches ordered by commits:
git config --global branch.sort -committerdate
git branch
Xem thêm cam kết 9e46833 (30 tháng 10 năm 2015) bởi Karthik Nayak ( KarthikNayak
) .
Giúp đỡ: Junio C Hamano ( gitster
) .
(Được hợp nhất bởi Junio C Hamano - gitster
- trong cam kết 415095f , ngày 03 tháng 11 năm 2015)
Khi sắp xếp theo giá trị số (ví dụ --sort=objectsize
), không có so sánh dự phòng khi cả hai ref đều giữ cùng một giá trị. Điều này có thể gây ra kết quả không mong muốn (nghĩa là thứ tự của danh sách giới thiệu có giá trị bằng nhau không thể được xác định trước) như được chỉ ra bởi Johannes Sixt ( $ gmane / 280117 ).
Do đó, dự phòng so sánh bảng chữ cái dựa trên tên gọi bất cứ khi nào tiêu chí khác bằng nhau .
$ git branch --sort=objectsize
* (HEAD detached from fromtag)
branch-two
branch-one
master
Với Git 2.19, thứ tự sắp xếp có thể được đặt theo mặc định.
git branch
hỗ trợ một cấu hình branch.sort
, như git tag
, đã có một cấu hình tag.sort
.
Xem cam kết 560ae1c (16 tháng 8 năm 2018) của Samuel Maftoul (``) .
(Được hợp nhất bởi Junio C Hamano - gitster
- trong cam kết d89db6f , ngày 27 tháng 8 năm 2018)
branch.sort:
Biến này kiểm soát thứ tự sắp xếp của các nhánh khi được hiển thị bởi git-branch
.
Nếu không có --sort=<value>
tùy chọn "" được cung cấp, giá trị của biến này sẽ được sử dụng làm mặc định.
Để liệt kê các chi nhánh từ xa, sử dụng git branch -r --sort=objectsize
. Các -r
lá cờ gây ra nó để liệt kê các chi nhánh từ xa thay vì các chi nhánh địa phương.
Với Git 2.27 (quý 2 năm 2020), git branch
các for-each-ref
biến thể " " và các " " khác đã chấp nhận nhiều --sort=<key>
tùy chọn theo thứ tự ưu tiên ngày càng tăng, nhưng nó đã có một vài phá vỡ xung quanh việc --ignore-case
xử lý "" và phá vỡ liên kết với tên gọi đã được sửa.
Xem cam kết 7c5045f , cam kết 76f9e56 (03 tháng 5 năm 2020) của Jeff King ( peff
) .
(Được hợp nhất bởi Junio C Hamano - gitster
- trong cam kết 6de1630 , ngày 08 tháng 5 năm 2020)
ref-filter
: chỉ áp dụng sắp xếp tên dự phòng sau khi tất cả các loại người dùng
Đã ký: Jeff King
Cam kết 9e468334b4 (" ref-filter
: dự phòng so sánh theo thứ tự chữ cái", 2015-10-30, Git v2.7.0-rc0 - hợp nhất được liệt kê trong lô # 10 ) đã dạy cách sắp xếp bộ lọc ref để so sánh các tên gọi.
Nhưng nó đã làm sai ở cấp độ, ghi đè kết quả so sánh cho một --sort
khóa " " duy nhất từ người dùng, thay vì sau khi tất cả các khóa sắp xếp đã hết.
Điều này hoạt động chính xác cho một --sort
tùy chọn "", nhưng không phải cho nhiều người.
Chúng tôi sẽ phá vỡ bất kỳ mối quan hệ nào trong khóa đầu tiên bằng tên gọi và không bao giờ đánh giá khóa thứ hai.
Để làm cho vấn đề thậm chí thú vị hơn, đôi khi chúng tôi chỉ áp dụng dự phòng này!
Đối với một trường như " taggeremail
" yêu cầu so sánh chuỗi, chúng tôi thực sự trả về kết quả strcmp()
, ngay cả khi là 0.
Nhưng đối với các value
trường "" như " taggerdate
", chúng tôi đã áp dụng dự phòng. Và đó là lý do tại sao bài kiểm tra nhiều loại của chúng tôi đã bỏ lỡ điều này: nó sử dụng taggeremail
làm so sánh chính.
Vì vậy, hãy bắt đầu bằng cách thêm một bài kiểm tra nghiêm ngặt hơn nhiều. Chúng tôi sẽ có một bộ các cam kết thể hiện mọi sự kết hợp của hai email, ngày và tên họ. Sau đó, chúng tôi có thể xác nhận rằng sắp xếp của chúng tôi được áp dụng với quyền ưu tiên chính xác và chúng tôi sẽ nhấn cả hai bộ so sánh chuỗi và giá trị.
Điều đó cho thấy lỗi và cách khắc phục rất đơn giản: di chuyển dự phòng sang compare_refs()
chức năng bên ngoài , sau khi tất cả ref_sorting
các khóa đã hết.
Lưu ý rằng trong chức năng bên ngoài, chúng ta không có "ignore_case"
cờ, vì đó là một phần của từng thành ref_sorting
phần riêng lẻ . Thật đáng tranh luận là một dự phòng như vậy nên làm gì, vì chúng tôi đã không sử dụng các khóa của người dùng để khớp.
Nhưng cho đến bây giờ chúng tôi đã cố gắng tôn trọng lá cờ đó, vì vậy điều ít xâm lấn nhất là cố gắng tiếp tục làm như vậy.
Vì tất cả người gọi trong mã hiện tại đều đặt cờ cho tất cả các phím hoặc không có gì, chúng tôi chỉ có thể kéo cờ từ phím đầu tiên. Trong một thế giới giả thuyết nơi người dùng thực sự có thể lật các trường hợp không nhạy cảm của các khóa, chúng tôi có thể muốn mở rộng mã để phân biệt trường hợp đó với chăn " --ignore-case
".