Làm thế nào để liệt kê tất cả các thẻ cùng với thông báo đầy đủ trong git?


360

Tôi muốn git liệt kê tất cả các thẻ cùng với chú thích đầy đủ hoặc thông báo cam kết. Một cái gì đó như thế này là gần:

git tag -n5

Điều này thực hiện chính xác những gì tôi muốn ngoại trừ việc nó sẽ chỉ hiển thị tối đa 5 dòng đầu tiên của thông báo thẻ.

Tôi đoán tôi chỉ có thể sử dụng một số lượng rất lớn. Số cao nhất tôi có thể sử dụng ở đây là gì? Có giống nhau trên mọi máy tính không?

CẬP NHẬT : Tôi đã có nhiều thời gian để suy nghĩ về điều này và bây giờ tôi nghĩ rằng tôi không nhất thiết muốn hiển thị toàn bộ mỗi tin nhắn nếu một số trong số chúng dài quá mức. Tôi thực sự không có nhu cầu đặc biệt nào đòi hỏi tôi phải xem các tin nhắn lớn (ngoài xu hướng của riêng tôi để được kéo dài trong mọi thứ tôi viết, bao gồm cả tin nhắn thẻ). Tôi chỉ không thích ý tưởng rằng nó không nhất thiết phải hiển thị cho tôi toàn bộ tin nhắn, vì điều đó khiến tôi cảm thấy như nó đang che giấu thông tin từ tôi. Nhưng quá nhiều thông tin cũng có thể là một điều xấu.


62
git tag -nđã làm điều đó cho tôi
Martin Berger

11
git tag -nchỉ in dòng đầu tiên của chú thích, theo trang chủ.
Paul Giá

@INTPner, đã đồng ý, thẻ -l được sử dụng cho các thẻ liệt kê với một mẫu cụ thể. Chỉnh sửa câu trả lời.
Zubair

Câu trả lời:


349

Hãy thử nó, nó sẽ liệt kê tất cả các thẻ cùng với chú thích và 9 dòng tin nhắn cho mỗi thẻ:

git tag -n9

cũng có thể sử dụng

git tag -l -n9

nếu các thẻ cụ thể được liệt kê:

git tag -l -n9 v3.*

(ví dụ: lệnh trên sẽ chỉ hiển thị các thẻ bắt đầu bằng "v3.")

-l, --list Danh sách thẻ có tên khớp với mẫu đã cho (hoặc tất cả nếu không có mẫu nào được đưa ra). Chạy "thẻ git" không có đối số cũng liệt kê tất cả các thẻ. Mẫu này là ký tự đại diện shell (nghĩa là được khớp bằng fnmatch (3)). Nhiều mẫu có thể được đưa ra; nếu bất kỳ trong số chúng phù hợp, thẻ được hiển thị.


6
Điều này sẽ chỉ in dòng đầu tiên của mỗi chú thích.
Paul Giá

3
@Paul Giá: chỉ có bạn có chú thích, nếu không nó sẽ in thông điệp cam kết. Đồng ý đây không phải câu trả lời.
Ciro Santilli 郝海东 冠状 病 事件

3
Theo tài liệu, -ltùy chọn là lọc trên một mẫu. Tôi không thấy làm thế nào sẽ hữu ích ở đây. Tui bỏ lỡ điều gì vậy?
still_dreaming_1

2
@INTPnerd vâng, điều -lnày hoàn toàn không cần thiết ở đây
Lambart

1
@ P.MyerNore Bạn phải sử dụng một phiên bản git kỳ lạ hoặc chuyển các đối số bổ sung để làm một cái gì đó nhiều hơn những gì câu hỏi này đang hỏi. Nhưng thật tốt khi biết rằng trong những tình huống nhất định, -l là cần thiết.
still_dreaming_1

119
git tag -n99

Ngắn và ngọt. Điều này sẽ liệt kê tối đa 99 dòng từ mỗi thông báo chú thích / cam kết thẻ. Đây là một liên kết đến các tài liệu chính thức cho thẻ git .

Bây giờ tôi nghĩ rằng giới hạn chỉ hiển thị tối đa 99 dòng trên mỗi thẻ thực sự là một điều tốt vì hầu hết thời gian, nếu thực sự có hơn 99 dòng cho một thẻ, bạn sẽ không thực sự muốn thấy tất cả phần còn lại của các dòng bạn sẽ làm gì? Nếu bạn muốn xem hơn 99 dòng trên mỗi thẻ, bạn luôn có thể tăng số này lên một số lớn hơn.

Ý tôi là, tôi đoán có thể có một tình huống hoặc lý do cụ thể để muốn xem các tin nhắn thẻ lớn, nhưng tại thời điểm nào bạn không muốn xem toàn bộ tin nhắn? Khi nó có hơn 999 dòng? 10.000? 1.000.000? Quan điểm của tôi là, thường có ý nghĩa khi có giới hạn về số lượng dòng bạn sẽ thấy và con số này cho phép bạn đặt điều đó.

Vì tôi đang tranh luận về những gì bạn thường muốn thấy khi nhìn vào thẻ của mình, có lẽ nên đặt một cái gì đó giống như một bí danh (từ bình luận của Iulian Onofrei bên dưới):

git config --global alias.tags 'tag -n99'

Ý tôi là, bạn không thực sự muốn gõ git tag -n99mỗi lần bạn chỉ muốn xem các thẻ của mình phải không? Khi bí danh đó được định cấu hình, bất cứ khi nào bạn muốn xem các thẻ của mình, bạn sẽ chỉ cần nhập git tagsvào thiết bị đầu cuối của mình. Cá nhân, tôi thích đưa mọi thứ đi xa hơn bước này và tạo ra các bí danh bash viết tắt thậm chí nhiều hơn cho tất cả các lệnh thường được sử dụng của tôi. Với mục đích đó, bạn có thể thêm một cái gì đó như thế này vào tệp .bashrc của bạn (hoạt động trên Linux và các môi trường tương tự):

alias gtag='git tag -n99'

Sau đó, bất cứ khi nào bạn muốn xem các thẻ của bạn, bạn chỉ cần gõ gtag. Một lợi thế khác của việc đi xuống đường dẫn bí danh (có thể là bí danh git hoặc bí danh bash hoặc bất cứ điều gì) là bây giờ bạn đã có một vị trí để bạn có thể thêm các tùy chỉnh khác vào cách cá nhân bạn, thường muốn hiển thị các thẻ của bạn cho bạn (như sắp xếp chúng theo những cách nhất định như trong bình luận của tôi dưới đây, v.v.). Khi bạn vượt qua khó khăn trong việc tạo bí danh đầu tiên của mình, bây giờ bạn sẽ nhận ra việc tạo thêm chúng dễ dàng như thế nào cho những thứ khác mà bạn muốn làm việc theo cách tùy chỉnh, như git log, nhưng hãy lưu câu hỏi đó cho một câu hỏi / câu trả lời khác .


3
git config --global alias.tags 'tag -n99'
Iulian Onofrei

@IulianOnofrei, thật tuyệt, tôi không biết git cho phép bạn xác định bí danh. Tôi nhận ra điều này không đúng chủ đề, nhưng tôi không thể cưỡng lại. Đây là những gì tôi hiện đang sử dụng (được đặt trong .bashrc của bạn hoặc đại loại như thế):alias gtag='git for-each-ref --format="%(refname:short) %(taggerdate) %(subject) %(body)" refs/tags | sort -V'
still_dreaming_1

25

Câu trả lời (sử dụng git show) của Mark Longair gần với câu hỏi mong muốn trong câu hỏi. Tuy nhiên, nó cũng bao gồm các cam kết được chỉ ra bởi thẻ, cùng với bản vá đầy đủ cho cam kết đó. Vì cam kết có thể không liên quan đến thẻ (chỉ có một cam kết rằng thẻ đang cố gắng nắm bắt), điều này có thể không mong muốn. Tôi tin rằng sau đây là một chút đẹp hơn:

for t in `git tag -l`; do git cat-file -p `git rev-parse $t`; done

Chương trình git của Mark không hiển thị các bản vá cho việc sử dụng của tôi. Lệnh của anh ta bỏ qua -p hoặc --patch, nhưng để hoàn toàn chắc chắn bỏ qua diff, người ta có thể sử dụng: --no-patch. (trên git v2.7.1 / mac)
AnneTheAgile

13

Nó khá xa, nhưng bạn có thể tạo một tập lệnh hoặc bí danh làm một cái gì đó như thế này:

for c in $(git for-each-ref refs/tags/ --format='%(refname)'); do echo $c; git show --quiet "$c"; echo; done

Có một lý do để không thay thế git for-each-ref refs/tags/ --format='%(refname)'bằng git tag -l?
Shai Berger

@ShaiBerger: trong thực tế, tôi không nghĩ vậy - Tôi đoán tôi chỉ nghĩ đó git taglà đồ sứ và git for-each-reflà hệ thống ống nước, vì vậy đầu ra của cái sau sẽ ổn định hơn cho kịch bản.
Mark Longair

10

Chỉ thông báo thẻ cuối cùng:

git cat-file -p $(git rev-parse $(git tag -l | tail -n1)) | tail -n +6

2
Đối với bất kỳ ai khác xảy ra khi điều này từ google: Nếu bạn muốn hiển thị thông báo từ một thẻ cụ thể: git cat-file -p <tag> | tail -n +6
Kit Peters


2

Tôi thích làm điều này trên dòng lệnh, nhưng nếu bạn không quan tâm đến giao diện web và bạn sử dụng GitHub, bạn có thể truy cập https://github.com/user/repo/tagsvà nhấp vào "..." bên cạnh mỗi thẻ để hiển thị chú thích của nó.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.