Tôi cần một số cách để liệt kê tất cả các thẻ trong hệ thống của mình trước ngày chúng được tạo nhưng tôi không chắc liệu tôi có thể lấy dữ liệu đó qua git-log hay không. Ý tưởng?
Tôi cần một số cách để liệt kê tất cả các thẻ trong hệ thống của mình trước ngày chúng được tạo nhưng tôi không chắc liệu tôi có thể lấy dữ liệu đó qua git-log hay không. Ý tưởng?
Câu trả lời:
Sắp xếp theo ngày tạo thẻ hoạt động với các thẻ chú thích và nhẹ:
git for-each-ref --sort=creatordate --format '%(refname) %(creatordate)' refs/tags
git for-each-ref --format="%(taggerdate): %(refname)" --sort=-taggerdate --count=10 refs/tags
đã làm chính xác những gì tôi cần. Cảm ơn!
%(contents)
để thêm vào chú thích nếu cần thiết, ví dụ nhưgit for-each-ref --sort='*authordate' --format='%(taggerdate:short) | %(tag) | %(contents)' refs/tags
git for-each-ref --sort=taggerdate --format '%(tag)'
--sort=creatordate
hoạt động cho cả thẻ chú thích và không được chú thích, nhưng --sort=taggerdate
dường như chỉ hoạt động với các thẻ chú thích. đã thử nghiệm bằng cách sử dụnggit version 2.16.3
Git 2.8 (Tháng 3 năm 2016) ghi lại một tùy chọn khác có niên đại từ git 1.4.4 (tháng 10 năm2006) .
Xem cam kết e914ef0 (ngày 5 tháng 1 năm 2016) của Eric Wong ( ele828
) .
(Được hợp nhất bởi Junio C Hamano - gitster
- trong cam kết 108cb77 , ngày 20 tháng 1 năm 2016)
Xem mới Documentation/git-for-each-ref.txt
Đối với các đối tượng cam kết và thẻ, đặc biệt
creatordate
vàcreator
các trường sẽ tương ứng với bộ dữ liệu ngày hoặc tên email-email thích hợp từcommitter
hoặctagger
các trường tùy thuộc vào loại đối tượng.
Chúng được dùng để làm việc trên một hỗn hợp các thẻ chú thích và nhẹ .
Vì vậy, sử dụng creatordate
hoạt động với các thẻ:
git for-each-ref --format='%(*creatordate:raw)%(creatordate:raw) %(refname) %(*objectname) %(objectname)' refs/tags | \
sort -n | awk '{ print $4, $3; }'
Hoặc là:
git tag --sort=-creatordate
Như tôi nêu chi tiết trong " Cách sắp xếp thẻ git theo thứ tự chuỗi phiên bản của mẫu RC-XYZW? ", Bạn có thể thêm thứ tự sắp xếp vào git tag
(kể từ Git 2.0 tháng 6 năm 2014).
Thứ tự sắp xếp đó bao gồm tên trường (được liệt kê trong git for-each-ref
) taggerdate . Điều đó cho phép git tag --sort=taggerdate
(được đề cập bởi DarVar bên dưới )
Ví dụ, trong git/git
repo, nó sẽ liệt kê v2.10.0
thẻ cuối cùng:
v2.9.1
v2.9.2
v2.9.3
v2.10.0-rc0
v2.10.0-rc1
v2.10.0-rc2
v2.10.0
Thứ tự mặc định sẽ không ( git tag
):
v2.1.2
v2.1.3
v2.1.4
v2.10.0
v2.10.0-rc0
v2.10.0-rc1
v2.10.0-rc2
v2.2.0
creatordate
!
git log --tags --simplify-by-decoration --pretty="format:%ci %d"
Ngoài ra đầu ra đẹp từ (không có trường ngày):
git log --tags --decorate --simplify-by-decoration --oneline
Để xem toàn bộ lịch sử với các phụ thuộc và các cam kết tuyến tính sọc (chỉ các sự kiện thiết yếu, như gắn thẻ và phân nhánh / hợp nhất):
git log --graph --decorate --simplify-by-decoration --oneline --all
git log --tags --simplify-by-decoration --pretty="format:%ci %d" | grep "tag:"
và nó hoạt động tốt nhất cho tôi.
git tag --sort=-taggerdate
Theo trang man, "Tiền tố - để sắp xếp theo thứ tự giảm dần của giá trị."
git tag
sử dụng các khóa sắp xếp tương tự như git-for-each-ref
, đó là nơi các khóa được ghi lại.
Điều này một lớp hiển thị ngày & thẻ mà không có bất kỳ phiền phức.
git tag --format='%(creatordate:short)%09%(refname:strip=2)'
Đầu ra:
2015-04-01 storaged-2.0.0
2015-06-11 storaged-2.1.0
2015-08-06 storaged-2.1.1
...
Nếu bạn không thích cách các thẻ được sắp xếp theo mặc định, chẳng hạn, bạn có thể sắp xếp theo ngày với tùy chọn --sort=creatordate
. Xem câu trả lời của VonC để biết thêm chi tiết.
Để có các thẻ chú thích và các thẻ nhẹ được sắp xếp hoàn toàn, dựa trên ngày cam kết, tôi đang sử dụng:
git for-each-ref --format='%(*committerdate:raw)%(committerdate:raw) %(refname) %(*objectname) %(objectname)' refs/tags | \
sort -n | awk '{ print $4, $3; }'
Lệnh này sẽ liệt kê mọi thẻ và id đối tượng cam kết liên quan, theo thứ tự thời gian.
Những điều sau đây phụ thuộc vào cam kết, vì vậy không có vấn đề gì nếu nó có thông tin ngày với cam kết:
git log --tags --decorate --simplify-by-decoration|grep ^commit|grep tag|sed -e 's/^.*: //' -e 's/)$//' -e 's/,.*$//'|tac
Câu trả lời ở trên của Josh Lee, dựa vào ngày gắn thẻ để đặt hàng đúng.
tac
là gì - có thể thay đổi nó thành more
. Dù sao lệnh của bạn đã làm việc tuyệt vời - cảm ơn!
Dựa trên các phương pháp được đề cập trước đó, tôi cũng muốn xem ngày thẻ thực tế trong danh sách, và vì vậy phiên bản sử dụng của tôi là:
git for-each-ref --format='%(*creatordate:raw)%(creatordate:raw) %(creatordate:short) %(refname) %(*objectname) %(objectname)' refs/tags | sort -n | awk '{ print $3, $5, $4 }'