Với Git 2.0 (tháng 6 năm 2014), bạn sẽ có thể chỉ định thứ tự sắp xếp!
Xem commit b6de0c6 , từ commit 9ef176b , tác giả Nguyễn Thái Ngọc Duy ( pclouds
) :
--sort=<type>
Sắp xếp theo một thứ tự cụ thể .
Loại được hỗ trợ là:
- "
refname
" (thứ tự từ vựng),
- "
version:refname
" hoặc " v:refname
" (tên thẻ được coi là phiên bản).
Thêm " -
" để đảo ngược thứ tự sắp xếp.
Vì vậy, nếu bạn có:
git tag foo1.3 &&
git tag foo1.6 &&
git tag foo1.10
Đây là những gì bạn sẽ nhận được:
# lexical sort
git tag -l --sort=refname "foo*"
foo1.10
foo1.3
foo1.6
# version sort
git tag -l --sort=version:refname "foo*"
foo1.3
foo1.6
foo1.10
# reverse version sort
git tag -l --sort=-version:refname "foo*"
foo1.10
foo1.6
foo1.3
# reverse lexical sort
git tag -l --sort=-refname "foo*"
foo1.6
foo1.3
foo1.10
Kể từ commit b150794 (bởi Jacob Keller, git 2.1.0, tháng 8 năm 2014), bạn có thể xác định thứ tự mặc định đó:
tag.sort
Biến này kiểm soát thứ tự sắp xếp của các thẻ khi được hiển thị bởi git-tag
.
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 giá trị mặc định.
bình luận trên robinst :
thứ tự sắp xếp phiên bản bây giờ có thể được cấu hình (Git 2.1+) làm mặc định:
git config --global tag.sort version:refname
Theo ghi nhận của Leo Galleguillos trong các bình luận :
Để cấu hình Git hiển thị các thẻ mới nhất trước ( thứ tự giảm dần ), chỉ cần thêm dấu gạch ngang trước phiên bản .
Lệnh trở thành:
git config --global tag.sort -version:refname
Với Git 2.4 (Q2 năm 2015) , các versionsort.prerelease
biến cấu hình có thể được sử dụng để xác định rằng v1.0-pre1
đến trướcv1.0
.
Xem cam kết f57610a của Junio C Hamano ( gitster
) .
Lưu ý (xem bên dưới) versionsort.prereleaseSuffix
bây giờ (2017) là một bí danh không dùng nữa cho versionsort.suffix
.
git 2.7.1 (tháng 2 năm 2016) sẽ cải thiện sản lượng của git tag
chính nó.
Xem cam kết 0571979 (26 tháng 1 năm 2016) và cam kết 1d094db (24 tháng 1 năm 2016) bởi Jeff King ( peff
) .
(Được hợp nhất bởi Junio C Hamano - gitster
- in cam kết 8bad3de , 01/02/2016)
tag
: không hiển thị tên thẻ không rõ ràng là " tags/foo
"
Kể từ khi b7cc53e ( tag.c
: use ' ref-filter
' API, 2015-07-11), git tag
đã bắt đầu hiển thị các thẻ có tên không rõ ràng (tức là khi tồn tại cả " heads/foo
" và " tags/foo
") là " tags/foo
" thay vì chỉ " foo
".
Đây là cả hai:
- vô nghĩa; đầu ra của "
git tag
" chỉ bao gồm refs/tags
, vì vậy chúng tôi biết rằng " foo
" có nghĩa là đầu ra trong " refs/tags
".
- và mơ hồ; trong đầu ra ban đầu, chúng ta biết rằng dòng "
foo
" có nghĩa là " refs/tags/foo
" tồn tại. Trong đầu ra mới, không rõ chúng ta có nghĩa là " refs/tags/foo
" hay " refs/tags/tags/foo
".
Lý do điều này xảy ra là commit b7cc53e chuyển sang git tag
sử dụng %(refname:short)
định dạng đầu ra " " của ref-filter , được điều chỉnh từ đó for-each-ref
. Mã tổng quát hơn này không biết rằng chúng tôi chỉ quan tâm đến các thẻ và sử dụng shorten_unambiguous_ref
để lấy short-name
.
Chúng tôi cần nói với nó rằng chúng tôi chỉ quan tâm đến "refs/tags/
" và nó phải rút ngắn lại so với giá trị đó.
hãy thêm một công cụ sửa đổi mới vào ngôn ngữ định dạng, " strip
", để xóa một tập hợp cụ thể của các thành phần tiền tố.
Điều này sửa lỗi " git tag
" và cho phép người dùng gọi cùng một hành vi từ các định dạng tùy chỉnh của riêng họ (cho " tag
" hoặc " for-each-ref
") trong khi vẫn để " :short
" với cùng một ý nghĩa nhất quán ở tất cả các vị trí.
Nếu strip=<N>
được nối thêm, dải các <N>
thành phần đường dẫn được phân tách bằng dấu gạch chéo từ phía trước tên đổi tên (ví dụ: %(refname:strip=2)
biến refs/tags/foo
thành foo
.
<N>
Phải là một số nguyên dương.
Nếu một tham chiếu được hiển thị có ít thành phần hơn <N>
, lệnh hủy bỏ do lỗi.
Đối với git tag
, khi không xác định, mặc định là %(refname:strip=2)
.
Cập nhật Git 2.12 (Q1 2017)
Xem cam kết c026557 , cam kết b178464 , cam kết 51acfa9 , cam kết b823166 , cam kết 109064a , cam kết 0c1b487 , cam kết 9ffda48 , cam kết eba286e (08 tháng 12 năm 2016) bởi SZEDER Gábor ( szeder
) .
(Hợp nhất bởi Junio C Hamano - gitster
- trong cam kết 1ac244d , ngày 23 tháng 1 năm 2017)
versionsort.prereleaseSuffix
là một bí danh không dùng nữa cho versionsort.suffix
.
Các prereleaseSuffix
tính năng của phiên bản so sánh được sử dụng trong " git tag -l
" không chính xác khi hai hoặc nhiều prereleases cho việc phát hành cùng đã có mặt (ví dụ như khi 2.0
, 2.0-beta1
và 2.0-beta2
đang có và nhu cầu mã để so sánh 2.0-beta1
và 2.0-beta2
).
git tag -l --sort=version:refname "rc-*"
và nhận được kết quả như mong muốn. xem câu trả lời của tôi bên dưới