2012-03-12 23 views

Trả lời

3

git fetch --tags sẽ làm điều đó.

Từ docs (mô tả của tham số --tags):

Hầu hết các thẻ được lấy tự động khi người đứng đầu chi nhánh được tải xuống, nhưng thẻ không chỉ ở các đối tượng truy cập từ người đứng đầu chi nhánh đang được theo dõi sẽ không được tìm nạp theo cơ chế này. Cờ này cho phép tất cả các thẻ và các đối tượng liên kết của chúng được tải xuống. Hành vi mặc định cho điều khiển từ xa có thể được chỉ định bằng cài đặt từ xa..tagopt.

+0

Nhưng tôi đang hỏi làm thế nào để ghi đè lên thẻ địa phương hiện có, bởi vì chúng được tạo ra sai – linquize

+1

'git fetch --tags' sẽ trong bản cập nhật thực tế hiện có thẻ địa phương, ví dụ như, nếu thẻ FOO từ xa ánh xạ tới 1234567 và bản đồ FOO thẻ địa phương cho fedcba9, 'git fetch --tags' sẽ thay thế FOO bằng 1234567. – torek

+0

Cập nhật: trong các phiên bản git mới hơn, điều này sẽ không còn cập nhật thẻ cục bộ nữa. Bạn có thể buộc cập nhật chúng thay vào đó, với 'git fetch '+ refs/tags/*: refs/tags/*'' ('--force' cũng có thể hoạt động, nhưng tôi chưa thử nghiệm). – torek

-1

Thẻ sẽ không bị ghi đè vì chúng có nghĩa là sắp xếp không thay đổi. Nếu bạn muốn có một đối tượng (thực tế) có thể thay đổi được, hãy sử dụng một nhánh con trỏ hoặc một tham số thay thế. Điều đó khiến bạn bị: git tag -d tên thẻ ... và sau đó tìm nạp lại.

+0

Tôi không đồng ý với tuyên bố đầu tiên của bạn - Điều này sẽ bóp méo toàn bộ vấn đề sử dụng VCS mà bạn không nghĩ? – lightonphiri

+0

Git không khuyến khích viết lại lịch sử (đã chia sẻ, từ xa). Điều đó không đánh bại điểm của một VCS - đó là để giữ cho lịch sử! Trong hầu hết các trường hợp, có thể ép buộc những thứ như vậy xảy ra nhưng nó có thể gây ra một số vấn đề. –

4

git fetch --tags --all --prune

này sẽ cho rõ ràng git để lấy, và cùng một lúc, hãy tháo thẻ mà không còn tồn tại trên điều khiển từ xa.

+1

Điều này dường như không xóa các thẻ chỉ xuất hiện tại địa phương. –

+0

@MartijnHeemels, git không thể phân biệt giữa thẻ chưa bao giờ được đẩy và thẻ đã bị xóa khỏi điều khiển từ xa. –

0

Đầu tiên, không giống như các nhánh, git không theo dõi các thẻ từ xa khác với các thẻ cục bộ. Sau khi tìm nạp xong, chúng không thể phân biệt được.

  • không cập nhật thẻ địa phương (mặc dù hướng dẫn không nói)
    • git fetch --tags
  • không cập nhật thẻ địa phương
    • git fetch
    • git fetch --prune
    • git fetch --prune --force

Thẻ cập nhật/ghi đè trông như thế này:

From git:path/name 
- [tag update]  my_tag -> my_tag 

này làm việc cho thẻ nhẹ và chú thích, thậm chí hỗn hợp. Đó là: thẻ được chú thích có thể được ghi đè bằng thẻ có trọng lượng nhẹ và ngược lại.

tôi đã sử dụng git phiên bản 2.7.4

+0

lưu ý: điều này không xóa các thẻ đã bị xóa trên điều khiển từ xa –

+0

@CarlosHeuberger Nhận xét của bạn cho thấy rằng bạn tin rằng có cách để thực hiện điều đó, nhưng không có. Bạn thực sự có thể xóa tất cả các thẻ cục bộ không tồn tại trên điều khiển từ xa, nhưng thẻ cũng xóa các thẻ _local không bao giờ trên điều khiển từ xa ở all_ (ví dụ: chưa được đẩy hoặc thẻ cho các mục đích chỉ dùng cục bộ). Không có cách nào để chỉ xóa các thẻ đã được _deleted trên remote_. –

+0

Bạn không chắc chắn lý do tại sao bạn cho rằng nhận xét của tôi gợi ý rằng - tôi chưa bao giờ viết có cách để làm điều đó!?! Tôi chỉ cố gắng để bổ sung câu trả lời của bạn vì không nơi nào nó nói rằng thẻ địa phương không bị xóa và "không cập nhật thẻ địa phương" có thể được hiểu cũng như loại bỏ một thẻ đã được gỡ bỏ trên điều khiển từ xa. Tôi nghĩ đó là một tuyên bố rõ ràng (không có bất kỳ gợi ý ẩn giấu nào) ... nhưng tiếng Anh của tôi có lẽ tệ hơn tôi nghĩ. –

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