Lưu ý: bắt đầu với git 1.9 / 2.0 (Q1 2014) , git fetch --tags
tìm nạp các thẻ ngoài những gì được tìm nạp bởi cùng một dòng lệnh mà không có tùy chọn.
Xem cam kết c5a84e9 của Michael Haggerty (mhagger) :
Trước đây, --tags
tùy chọn " " của fetch được coi là tương đương với việc chỉ định refspec
refs/tags/*:refs/tags/*
trên dòng lệnh; đặc biệt, nó làm cho remote.<name>.refspec
cấu hình bị bỏ qua.
Nhưng nó không phải là rất hữu ích để lấy thẻ mà không có cũng lấy tài liệu tham khảo khác, trong khi nó là khá hữu ích để có thể lấy thẻ , thêm vào tài liệu tham khảo khác.
Vì vậy, thay đổi ngữ nghĩa của tùy chọn này để làm sau.
Nếu người dùng muốn lấy chỉ thẻ, sau đó nó vẫn còn có thể chỉ định một refspec rõ ràng:
git fetch <remote> 'refs/tags/*:refs/tags/*'
Xin lưu ý rằng tài liệu trước 1.8.0.3 không rõ ràng về khía cạnh fetch --tags
hành vi "" này.
Cam kết f0cb2f1 (2012-12-14) fetch --tags
làm cho tài liệu phù hợp với hành vi cũ.
Cam kết này thay đổi tài liệu để phù hợp với hành vi mới (xem Documentation/fetch-options.txt
).
Yêu cầu tất cả các thẻ được tìm nạp từ xa ngoài bất kỳ thứ gì khác đang được tìm nạp .
Vì Git 2.5 (quý 2 năm 2015) git pull --tags
mạnh mẽ hơn:
Xem cam kết 19d122b của Paul Tan ( pyokagan
) , ngày 13 tháng 5 năm 2015.
(Được hợp nhất bởi Junio C Hamano - gitster
- trong cam kết cc77b99 , ngày 22 tháng 5 năm 2015)
pull
: xóa --tags
lỗi trong trường hợp ứng viên không hợp nhất
Vì 441ed41 (" git pull --tags
": lỗi với thông báo tốt hơn., 2007-12-28, Git 1.5.4+), git pull --tags
sẽ in một thông báo lỗi khác nếu
git-fetch
không trả về bất kỳ ứng cử viên hợp nhất nào:
It doesn't make sense to pull all tags; you probably meant:
git fetch --tags
Điều này là do tại thời điểm đó, git-fetch --tags
sẽ ghi đè bất kỳ refspecs được cấu hình nào và do đó sẽ không có ứng cử viên hợp nhất. Do đó, thông báo lỗi đã được giới thiệu để tránh nhầm lẫn.
Tuy nhiên, vì c5a84e9 ( fetch --tags
: tìm nạp các thẻ ngoài
các nội dung khác, 2013-10-30, Git 1.9.0+), git fetch --tags
sẽ tìm nạp các thẻ ngoài bất kỳ refspec nào được định cấu hình.
Do đó, nếu không có tình huống ứng cử viên hợp nhất xảy ra, đó không phải là vì --tags
đã được đặt. Như vậy, thông báo lỗi đặc biệt này hiện không liên quan.
Để tránh nhầm lẫn, loại bỏ thông báo lỗi này.
Với Git 2.11+ (Q4 2016) git fetch
thì nhanh hơn.
Xem cam kết 5827a03 (ngày 13 tháng 10 năm 2016) của Jeff King ( peff
) .
(Được hợp nhất bởi Junio C Hamano - gitster
- trong cam kết 9fcd144 , ngày 26 tháng 10 năm 2016)
fetch
: sử dụng "quick" has_sha1_file
để theo dõi thẻ
Khi tìm nạp từ xa có nhiều thẻ không liên quan đến các nhánh mà chúng tôi đang theo dõi, chúng tôi thường lãng phí quá nhiều chu kỳ khi kiểm tra xem đối tượng được trỏ bởi thẻ (mà chúng tôi sẽ không tìm nạp!) quá cẩn thận
Bản vá này dạy tìm nạp để sử dụng HAS_SHA1_QUICK để hy sinh độ chính xác cho tốc độ, trong trường hợp chúng ta có thể không thích hợp với việc đóng gói lại đồng thời.
Dưới đây là kết quả từ tập lệnh perf bao gồm, thiết lập một tình huống tương tự như tình huống được mô tả ở trên:
Test HEAD^ HEAD
----------------------------------------------------------
5550.4: fetch 11.21(10.42+0.78) 0.08(0.04+0.02) -99.3%
Điều đó chỉ áp dụng cho một tình huống:
- Bạn có rất nhiều gói ở phía khách hàng để làm cho
reprepare_packed_git()
đắt tiền (phần đắt nhất là tìm các bản sao trong danh sách chưa được sắp xếp, hiện đang là bậc hai).
- Bạn cần một số lượng lớn các thẻ giới thiệu ở phía máy chủ là ứng cử viên để tự động theo dõi (nghĩa là khách hàng không có). Mỗi cái kích hoạt đọc lại thư mục pack.
- Trong các trường hợp thông thường, khách hàng sẽ tự động theo dõi các thẻ đó và sau một lần tìm nạp lớn, (2) sẽ không còn đúng nữa.
Nhưng nếu các thẻ đó trỏ đến lịch sử bị ngắt kết nối với những gì khách hàng tìm nạp, thì nó sẽ không bao giờ tự động theo dõi và những ứng cử viên đó sẽ tác động đến nó trên mỗi lần tìm nạp.
Git 2.21 (tháng 2 năm 2019) dường như đã giới thiệu một hồi quy khi cấu hình remote.origin.fetch
là không một mặc định ( '+refs/heads/*:refs/remotes/origin/*'
)
fatal: multiple updates for ref 'refs/tags/v1.0.0' not allowed
Git 2.24 (Q4 2019) thêm một tối ưu hóa khác.
Xem cam kết b7e2d8b (15 tháng 9 năm 2019) của Masaya Suzuki ( draftcode
) .
(Được hợp nhất bởi Junio C Hamano - gitster
- trong cam kết 1d8b0df , ngày 07 tháng 10 năm 2019)
fetch
: sử dụng oidset
để giữ OID muốn tìm kiếm nhanh hơn
Trong khi git fetch
, khách hàng kiểm tra xem các OID của thẻ được quảng cáo đã có trong bộ OID của yêu cầu tìm nạp chưa.
Kiểm tra này được thực hiện trong một quét tuyến tính.
Đối với một kho lưu trữ có nhiều ref, việc lặp lại quá trình quét này mất hơn 15 phút.
Để tăng tốc độ này, hãy tạo một oid_set
OID cho các ref khác.