2012-05-18 30 views

Trả lời

73

Sử dụng git ls-remote --tags <repository>

Ví dụ, nếu chúng ta muốn biết những gì các thẻ mới nhất mà Git tại thời điểm chúng tôi sẽ làm

git ls-remote --tags git://github.com/git/git.git 

Điều đó trả về một danh sách dài với tất cả các thẻ theo thứ tự bảng chữ cái, như hình dưới đây (cắt ngắn vì lợi ích của sanity). Dòng cuối cùng cho chúng tôi biết thẻ mới nhất là v1.8.0-rc0.

Hãy ghi nhớ rằng thẻ có thể được bất kỳ loại chuỗi như vậy, như đã chỉ ra bởi Christopher Gervais trong his answer, git ls-remote cả các loại thẻ theo thứ tự abc. Rất tiếc, git ls-remote không có tùy chọn --sort (ví dụ: git for-each-ref), do đó, tùy chọn tốt nhất của bạn là sử dụng số gốc sort.

Các phiên bản gần đây của sort hỗ trợ cờ -V hoặc --version-sort để tạo một số tự nhiên (phiên bản) trong văn bản.

Vì vậy, để sort them naturally, lệnh của bạn sẽ trông như thế này:

git ls-remote --tags git://github.com/git/git.git | sort -t '/' -k 3 -V 

Hãy xem tại (và phiếu bầu tán thành) Christopher Gervais's answer dưới đây nếu bạn cần lựa chọn hơn/khác grep ing.


 ... 
e4dc716b1cfefb0e1bd46c699d4f74009118d001 refs/tags/v1.7.9 
828ea97de486c1693d6e4f2c7347acb50235a85d refs/tags/v1.7.9^{} 
cc34c0417dfd4e647e41f3d34a032b7164aadea7 refs/tags/v1.7.9-rc0 
eac2d83247ea0a265d923518c26873bb12c33778 refs/tags/v1.7.9-rc0^{} 
ad2ec9a47a031ebf056444a94bea3750aaa68f63 refs/tags/v1.7.9-rc1 
6db5c6e43dccb380ca6e9947777985eb11248c31 refs/tags/v1.7.9-rc1^{} 
eab05abaeb51531e11835aaa4c26564a1babebac refs/tags/v1.7.9-rc2 
bddcefc6380bd6629f3f12b5ffd856ec436c6abd refs/tags/v1.7.9-rc2^{} 
    ... 
5ace0b7af106b44687005085d8c252f8be9da5d3 refs/tags/v1.8.0-rc0 
b0ec16b49eb283156e13bbef26466d948e4fd992 refs/tags/v1.8.0-rc0^{} 
+3

Đây là câu trả lời. – Qix

+0

làm cách nào để loại bỏ mọi thứ trừ tên chi nhánh? – kilianc

+0

@kilianc Bạn có thể sử dụng một cái gì đó như '| cut -f 2' nhưng thành thật mà nói nó nghe như một câu hỏi riêng ... Một cái gì đó như http://stackoverflow.com/questions/219402/what-linux-shell-command-returns-a-part-of-a- string – Potherca

12

Unfortuntely, git ls-remote --tags thực sự liệt kê theo thứ tự abc thẻ (ít nhất là trong 1.7.2.5). Vì vậy, tại thời điểm đó 1.7.10, 1.7.11 hoặc 1.7.12 là các thẻ mới nhất, 1.7.9 sẽ là người cuối cùng trong danh sách:

git ls-remote --tags git://github.com/git/git.git |grep "1\.7\." 

[...] 
bf68fe0313c833fa62755176f6e24988ef7cf80f  refs/tags/v1.7.9.6 
cb2ed324fc917db0b79d7b1f3756575ffa5f70d5  refs/tags/v1.7.9.6^{} 
3996bb24c84013ec9ce9fa0980ce61f9ef97be4d  refs/tags/v1.7.9.7 
d0f1ea6003d97e63110fa7d50bb07f546a909b6e  refs/tags/v1.7.9.7^{} 

Tuy nhiên, chúng ta có thể ống những kết quả thông qua ' sắp xếp 'để đến gần hơn với kết quả chúng tôi đang tìm kiếm:

git ls-remote --tags git://github.com/git/git.git |grep "1\.7\."| sort -g -k3 -t. 

[...] 
eab05abaeb51531e11835aaa4c26564a1babebac  refs/tags/v1.7.9-rc2 
eac2d83247ea0a265d923518c26873bb12c33778  refs/tags/v1.7.9-rc0^{} 
f59f511e26b4924b22c6966e79fe4f754bc81dc6  refs/tags/v1.7.9.2 
0e2d57fd50f61e668be3180bc8f25991ea88aa8c  refs/tags/v1.7.10-rc1^{} 
121f71f0da1bc9a4e1e96be2c3e683191a82a354  refs/tags/v1.7.10.4^{} 
26e5c5d09334d157bd04f794f16f6e338d50c752  refs/tags/v1.7.10.3^{} 
[...] 
cffb45719f60d6fc2cc98ead6af88a895c63c9ac  refs/tags/v1.7.12.4 
d8cf053dacb4f78920c112d10c7be21e4f5a5817  refs/tags/v1.7.12.2^{} 
dcd07fb6262fd8bb9f531890df3986a8b719a0b5  refs/tags/v1.7.12-rc0 
e15c16de396a1e1f42001b03cb885ce64eb4098e  refs/tags/v1.7.12-rc2^{} 

Trong khi vẫn không chính xác, nó gần hơn. Nếu chúng ta loại trừ -rc và^{}, và thêm một loại bổ sung trên cuối cùng số tiểu phiên bản, chúng ta có thể có thể nhận được gần đủ cho hầu hết các nhu cầu:

git ls-remote --tags git://github.com/git/git.git |grep "1\.7\."|grep -v -|grep -v {| sort -n -t. -k3 -k4 

23ed9debf17263ed6bed478a4d6d86e71342c18a  refs/tags/v1.7.11.6 
527b331100ddba839cc54bb31c1bcd66acc08321  refs/tags/v1.7.11.7 
14d20a75e3d57a872a8c81ae90dcc4c61ddba011  refs/tags/v1.7.12 
51993a414a76120fda20d56ba767fa513d9ff440  refs/tags/v1.7.12.1 
04043f4d1ae42bddee67d354a2e6fd2464592a1e  refs/tags/v1.7.12.2 
b38da673be332933b8f3a873ce46ffea08d2ee2c  refs/tags/v1.7.12.3 
cffb45719f60d6fc2cc98ead6af88a895c63c9ac  refs/tags/v1.7.12.4 
+1

những gì từ cửa sổ cmd? – albanx

2

này làm việc cho tôi how to get latest tag from github remote repository

git ls-remote --tags "#{github_repo}" | awk '{print $2}' | grep -v '{}' | awk -F"/" '{print $3}' | sort -n -t. -k1,1 -k2,2 -k3,3 | tail -n 1.chomp 
+0

Nó không thành công khi thẻ mới nhất, ví dụ, 1.4.34. Thay vào đó, nó sẽ báo cáo 1.4.9. Tôi đoán 9 đến sau 3 - nó không được hiểu là 34. –

+0

@ernestopheles bạn là chính xác Tôi đã cập nhật câu trả lời để khắc phục vấn đề đó. Cảm ơn đã chỉ ra điều đó. – Vbp

Các vấn đề liên quan