Catatan: dimulai dengan git 1.9 / 2.0 (Q1 2014) , git fetch --tags
mengambil tag di samping apa yang diambil oleh baris perintah yang sama tanpa opsi.
Lihat commit c5a84e9 oleh Michael Haggerty (mhagger) :
Sebelumnya, pilihan fetch --tags
dianggap setara dengan menentukan refspec
refs/tags/*:refs/tags/*
di baris perintah; khususnya, itu menyebabkan remote.<name>.refspec
konfigurasi diabaikan.
Tapi itu tidak sangat berguna untuk mengambil tag tanpa juga mengambil referensi lain, padahal ini sangat berguna untuk dapat mengambil tag di samping referensi lain.
Jadi ubah semantik opsi ini untuk melakukan yang terakhir.
Jika seorang pengguna ingin mengambil hanya tag, maka masih mungkin untuk menentukan sebuah refspec eksplisit:
git fetch <remote> 'refs/tags/*:refs/tags/*'
Harap perhatikan bahwa dokumentasi sebelum 1.8.0.3 tidak jelas tentang aspek fetch --tags
perilaku ini.
Commit f0cb2f1 (2012-12-14) fetch --tags
menjadikan dokumentasi tersebut cocok dengan perilaku lama.
Komit ini mengubah dokumentasi agar sesuai dengan perilaku baru (lihat Documentation/fetch-options.txt
).
Minta agar semua tag diambil dari jarak jauh selain apa pun yang sedang diambil .
Karena Git 2.5 (Q2 2015) git pull --tags
lebih kuat:
Lihat komit 19d122b oleh Paul Tan ( pyokagan
) , 13 Mei 2015.
(Digabung oleh Junio C Hamano - gitster
- dalam komit cc77b99 , 22 Mei 2015)
pull
: hapus --tags
kesalahan dalam kasus tidak ada kandidat gabungan
Sejak 441ed41 (" git pull --tags
": galat dengan pesan yang lebih baik., 2007-12-28, Git 1.5.4+), git pull --tags
akan mencetak pesan galat yang berbeda jika
git-fetch
tidak mengembalikan kandidat gabungan:
It doesn't make sense to pull all tags; you probably meant:
git fetch --tags
Ini karena pada saat itu, git-fetch --tags
akan menimpa refspec yang dikonfigurasi, dan dengan demikian tidak akan ada kandidat gabungan. Pesan kesalahan dengan demikian diperkenalkan untuk mencegah kebingungan.
Namun, karena c5a84e9 ( fetch --tags
: ambil tag di samping
hal-hal lain, 2013-10-30, Git 1.9.0+), git fetch --tags
akan mengambil tag di samping setiap refspec yang dikonfigurasi.
Oleh karena itu, jika ada situasi tidak ada kandidat yang bergabung, itu bukan karena --tags
ditetapkan. Dengan demikian, pesan kesalahan khusus ini sekarang tidak relevan.
Untuk mencegah kebingungan, hapus pesan kesalahan ini.
Dengan Git 2.11+ (Q4 2016) git fetch
lebih cepat.
Lihat komit 5827a03 (13 Okt 2016) oleh Jeff King ( peff
) .
(Digabung oleh Junio C Hamano - gitster
- dalam komit 9fcd144 , 26 Okt 2016)
fetch
: gunakan "cepat" has_sha1_file
untuk mengikuti tag
Ketika mengambil dari remote yang memiliki banyak tag yang tidak relevan dengan cabang yang kita ikuti, kita dulu membuang terlalu banyak siklus ketika memeriksa apakah objek diarahkan oleh tag (yang tidak akan kita ambil!) Ada di repositori kami terlalu hati-hati.
Patch ini mengajarkan cara menggunakan HAS_SHA1_QUICK untuk mengorbankan akurasi demi kecepatan, dalam kasus di mana kita mungkin bersemangat dengan pengemasan ulang secara simultan.
Berikut adalah hasil dari skrip perf yang disertakan, yang mengatur situasi yang mirip dengan yang dijelaskan di atas:
Test HEAD^ HEAD
----------------------------------------------------------
5550.4: fetch 11.21(10.42+0.78) 0.08(0.04+0.02) -99.3%
Itu hanya berlaku untuk situasi di mana:
- Anda memiliki banyak paket di sisi klien untuk menghasilkan
reprepare_packed_git()
mahal (bagian paling mahal adalah menemukan duplikat dalam daftar yang tidak disortir, yang saat ini kuadratik).
- Anda memerlukan sejumlah besar tag referensi di sisi server yang merupakan kandidat untuk mengikuti otomatis (yaitu, yang tidak dimiliki klien). Masing-masing memicu membaca kembali direktori paket.
- Dalam keadaan normal, klien akan mengikuti tag itu secara otomatis dan setelah mengambil satu jumlah besar, (2) tidak lagi benar.
Tetapi jika tag-tag itu menunjuk pada sejarah yang terputus dari apa yang dijemput oleh klien, maka itu tidak akan pernah secara otomatis mengikuti, dan para kandidat itu akan berdampak pada setiap pengambilan.
Git 2.21 (Februari 2019) tampaknya telah memperkenalkan regresi ketika config remote.origin.fetch
adalah tidak satu standar ( '+refs/heads/*:refs/remotes/origin/*'
)
fatal: multiple updates for ref 'refs/tags/v1.0.0' not allowed
Git 2.24 (Q4 2019) menambahkan optimasi lain.
Lihat commit b7e2d8b (15 Sep 2019) oleh Masaya Suzuki ( draftcode
) .
(Digabung oleh Junio C Hamano - gitster
- dalam commit 1d8b0df , 07 Okt 2019)
fetch
: gunakan oidset
untuk menjaga OID yang diinginkan agar pencarian lebih cepat
Selama git fetch
, klien memeriksa apakah OID tag yang diiklankan sudah dalam permintaan pengambilan yang ingin OID atur.
Pemeriksaan ini dilakukan dalam pemindaian linier.
Untuk repositori yang memiliki banyak referensi, mengulangi pemindaian ini membutuhkan waktu 15 menit lebih.
Untuk mempercepat ini, buat oid_set
OID referensi lain.