Bisakah kita menetapkan standar Git untuk mengambil semua tag selama tarikan jarak jauh?

154

Saat ini saya memiliki pengaturan git remote seperti berikut:

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

Ketika saya menerbitkan git pullmaster cabang, semua kepala jarak jauh diambil menjadi remote / upstream, kemudian remote / upstream / master digabung menjadi master. Tag apa pun yang dapat dihubungi juga diambil pada saat yang sama, yang sangat nyaman.

Saya juga ingin git pullmengambil semua tag dari jarak jauh, bukan hanya tag yang dapat dijangkau langsung dari kepala. Saya awalnya mencoba mengatur tagopt == --tags, tetapi menemukan ini hanya menyebabkan tag untuk mengambil dan dengan demikian merusak semuanya. (Junio ​​bahkan mengatakan itu adalah kesalahan konfigurasi yang mengerikan ).

Apakah ada cara untuk git pullmengambil semua tag jarak jauh secara default, selain dari kepala jarak jauh?

jleahy
sumber
1
Pengingat pada diri saya: Pastikan Anda benar-benar mendorong tag terlebih dahulu (tidak bekerja secara otomatis): git push origin <tag_name>
Hafenkranich
Menggunakan tagoptsolusi tidak lagi salah konfigurasi; pada 1.9 / 2.0 (Q1 2014) ini akan mengambil semua tag selain apa pun yang biasanya diambil.
mgiuffrida

Jawaban:

95

Anda harus dapat melakukannya dengan menambahkan refspec untuk tag ke konfigurasi lokal Anda. Secara konkret:

[remote "upstream"]
    url = <redacted>
    fetch = +refs/heads/*:refs/remotes/upstream/*
    fetch = +refs/tags/*:refs/tags/*
joshtkling
sumber
5
Aha, saya tidak pernah menyadari Anda bisa memiliki beberapa baris pengambilan, saya kira yang terakhir hanya akan menimpanya. Itu sangat bagus dan eksplisit.
jleahy
1
Hati-hati menggunakan ini dengan git 2.21, lihat apple.stackexchange.com/questions/352404/...
Vadorequest
306

Sederhana git fetch --tagsbekerja untuk saya.

russoue
sumber
13
@Fizzix Mungkin judulnya harus diubah untuk memasukkan "secara default". Posting ini menjawab pertanyaan saya.
Matt Kneiser
2
Ini tidak berhasil untuk saya. Saya dapat melihat tag dengan git ls-remote.
berbahayahobo
Ini mungkin tidak menjawab pertanyaan yang tepat, tetapi itu menjawab pertanyaan dalam judul dan itulah bagaimana saya menemukannya melalui pencarian web.
Hubert Grzeskowiak
68

The --forcepilihan berguna untuk menyegarkan tag lokal. Terutama jika Anda memiliki tag mengambang:

git fetch --tags --force

Opsi tarik git juga memiliki --forceopsi, dan deskripsinya sama:

Ketika git fetch digunakan dengan <rbranch>: <lbranch> refspec, ia menolak untuk memperbarui cabang lokal <lbranch> kecuali cabang jarak jauh <rbranch> yang diambilnya adalah turunan dari <lbranch>. Opsi ini mengabaikan pemeriksaan itu.

tetapi, menurut dokumen dari --no-tags:

Secara default, tag yang mengarah ke objek yang diunduh dari repositori jarak jauh diambil dan disimpan secara lokal.

Jika pernyataan default itu bukan batasan, maka Anda juga bisa mencoba

git pull --force
Yucer
sumber
2
git pull --forcetidak termasukgit fetch --tags --force
Geniy
21

Bagi saya yang berikut ini sepertinya berhasil.

git pull --tags
Vasantha Ganesh K
sumber
Hanya mengambil tag, Anda mungkin bermaksud: `git fetch --tags`
Yuseferi
Sudah ada jawaban dengan git fetch --tags. Saya ingin memberikan jawaban alternatif. pull = fetch + merge. Jadi fetch juga terjadi.
Vasantha Ganesh K
13

Itu mudah. Lakukan a

git fetch --all

amulamul
sumber
1

Saya menggunakan ini dengan magit di kernel.org

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