Chúng ta có thể đặt mặc định Git để tìm nạp tất cả các thẻ trong khi kéo từ xa không?


153

Tôi hiện có một thiết lập từ xa git như sau:

[remote "upstream"]
    url = <redacted>
    fetch = +refs/heads/*:refs/remotes/upstream/*

Khi tôi phát hành git pull trên master master, tất cả các đầu từ xa được tìm nạp vào điều khiển từ xa / ngược dòng, sau đó điều khiển từ xa / ngược dòng / master được hợp nhất thành master. Bất kỳ thẻ nào có thể đạt được cũng được tìm nạp cùng một lúc, rất thuận tiện.

Tôi cũng muốn git pulltìm nạp thêm tất cả các thẻ từ xa, không chỉ những thẻ có thể truy cập trực tiếp từ đầu. Ban đầu tôi đã thử thiết lập tagopt == --tags, nhưng thấy điều này chỉ khiến các thẻ được tìm nạp và do đó phá vỡ mọi thứ. (Junio ​​thậm chí còn nói rằng đó là một cấu hình sai lầm khủng khiếp ).

Có cách nào để git pulltìm nạp tất cả các thẻ từ xa theo mặc định, ngoài các đầu từ xa không?


1
Một lời nhắc nhở bản thân: Hãy chắc chắn rằng bạn thực sự đã đẩy thẻ trước (không hoạt động tự động): git push origin <tag_name>
Hafenkranich

Sử dụng tagoptgiải pháp không còn là một cấu hình sai; kể từ 1.9 / 2.0 (Q1 2014), điều này sẽ tìm nạp tất cả các thẻ ngoài bất kỳ thứ gì thường được tìm nạp.
mgiuffrida

Câu trả lời:


95

Bạn sẽ có thể thực hiện điều này bằng cách thêm một refspec cho các thẻ vào cấu hình cục bộ của bạn. Cụ thể:

[remote "upstream"]
    url = <redacted>
    fetch = +refs/heads/*:refs/remotes/upstream/*
    fetch = +refs/tags/*:refs/tags/*

5
Aha, tôi chưa bao giờ nhận ra bạn có thể có nhiều dòng tìm nạp, tôi cho rằng cái cuối cùng sẽ ghi đè lên. Điều đó rất hay và rõ ràng.
jleahy

1
Cẩn thận khi sử dụng điều này với git 2.21, xem apple.stackexchange.com/questions3532404/iêu
Vadorequest

306

Một git fetch --tagscông việc đơn giản cho tôi.


13
@Fizzix Có lẽ tiêu đề nên được thay đổi để bao gồm "theo mặc định". Bài đăng này đã trả lời câu hỏi của tôi.
Matt Kneiser

2
Điều này đã không làm việc cho tôi. Tôi có thể thấy các thẻ với git ls-remote.
nguy

Điều này có thể không trả lời chính xác câu hỏi, nhưng nó trả lời câu hỏi trong tiêu đề và đó là cách tôi tìm thấy nó thông qua tìm kiếm trên web.
Hubert Grzeskowiak

67

Các --forcetùy chọn rất hữu ích để làm mới các thẻ địa phương. Chủ yếu nếu bạn có thẻ nổi:

git fetch --tags --force

Tùy chọn git pull cũng có các --forcetùy chọn và mô tả giống nhau:

Khi git fetch được sử dụng với <rbranch>: <lbranch> refspec, nó từ chối cập nhật nhánh cục bộ <lbranch> trừ khi nhánh từ xa <rbranch> nó tìm nạp là hậu duệ của <lbranch>. Tùy chọn này ghi đè kiểm tra đó.

nhưng, theo tài liệu của --no-tags:

Theo mặc định, các thẻ trỏ vào các đối tượng được tải xuống từ kho lưu trữ từ xa được tìm nạp và lưu trữ cục bộ.

Nếu câu lệnh mặc định đó không phải là một hạn chế, thì bạn cũng có thể thử

git pull --force

2
git pull --forcekhông bao gồmgit fetch --tags --force
Geniy

21

Đối với tôi sau đây dường như làm việc.

git pull --tags

Chỉ tìm nạp các thẻ, có lẽ bạn có nghĩa là: 'git fetch --tags`
Yuseferi

Đã có câu trả lời với git fetch --tags. Tôi muốn đưa ra một câu trả lời thay thế. kéo = tìm nạp + hợp nhất. Vì vậy, tìm nạp cũng xảy ra.
Vasantha Ganesh K


1

Tôi sử dụng điều này với magit trên kernel.org

[remote "upstream"]
    url = <redacted>
    fetch = +refs/heads/*:refs/remotes/upstream/*
    tagOpt = --tags
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.