Nella configurazione di default di git remote devi inviare esplicitamente i tag (mentre vengono recuperati automaticamente insieme agli commit a cui puntano). Devi usare
$ git push <remote> tag <tagname>
per inviare un singolo tag o
$ git push <remote> --tags
per inviare tutti i tag (o git push --tags
per passare al telecomando predefinito, in genere origin
).
Questo è un comportamento molto previsto, per rendere espliciti i tag push. Spingere i tag dovrebbe essere di solito una scelta consapevole.
Riassumendo ciò che ha scritto Junio C. Hamano (collegato nei commenti di @Andre Miras)
Durante il recupero, stai interagendo con un repository remoto che qualcuno ha pubblicato, il che significa:
- l'insieme di tag esistenti ci sono tutti i publisher che la gente voleva che vedessero e
- non solo tu ma altre persone vedrai anche gli stessi tag.
In altre parole, i tag nei repository da cui prendi sono progettati per essere pubblici e condivisi. Faciliterà la comunicazione tra gli sviluppatori se è facile per tutti recuperare questi stessi tag.
Ecco perché git fetch
"segue" automaticamente i tag, ovvero scarica i tag durante il download delle revisioni a cui puntano, ovvero scarica tutti i tag pubblicati pertinenti .
Quando si spinge, si sta spingendo dal proprio repository di lavoro, che la maggior parte delle volte non è pubblico, e i tag in quel repository non sono progettati per essere pubblici. Puoi utilizzare i tuoi tag locali per contrassegnare i tuoi progressi, quindi non ha senso spingere alla cieca tutti i tag nel tuo repository nel repository che stai spingendo per pubblicare le modifiche, i cui tag sono per definizione pubblici.
Ecco perché è necessario inviare il tag in modo esplicito, per contrassegnare il tag come pubblico.
In alternativa puoi configurare il telecomando su cui premi per inviare sempre tutti i tag, ad esempio inserendo qualcosa del genere nel tuo .git/config
:
[remote "publishing"] # o come si chiama
url = ...
push = + refs / heads / *: refs / heads / *
push = + refs / tags / *: refs / tags / *
Questo significa forzare il push di tutte le teste (tutti i rami) e tutti i tag (se non si desidera forzare il push delle teste, rimuovere il prefisso '+' da refspec).
git push --follow-tags
ora può essere utile, vedi la mia risposta di seguito