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?


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/*

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.


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

2
git pull --forcetidak termasukgit fetch --tags --force
Geniy

21

Bagi saya yang berikut ini sepertinya berhasil.

git pull --tags

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


1

Saya menggunakan ini dengan magit di kernel.org

[remote "upstream"]
    url = <redacted>
    fetch = +refs/heads/*:refs/remotes/upstream/*
    tagOpt = --tags
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.