Skip to contentSkip to conversation

most annoying thing in git-push

DISCUSSION Alexey I. Froloff 4 participants 5 messages Jun 15, 2016

lore
Share & tools
lore
#0 lore raw

From git-fetch(1), -n option description: "By default, tags that point at objects that are downloaded from the remote repository are fetched and stored locally."

Is is possible to add such functionality to git-push, so it will push tags that point at objects that were uploaded to the remote repository?

Signature · 2 lines
Regards,
Sir Raorn.
#1 lore raw
Quoted 3 lines · Alexey I. Froloff

Is is possible to add such functionality to git-push, so it will push tags that point at objects that were uploaded to the remote repository?

I think it is doable, because the protocol is for the receiver to first advertise all its existing refs, which means that the sender can learn what is missing by first enumerating the tags it has, subtracting what the receiver has, and then computing the ones that are missing from the receiver and are reachable from the commits it is pushing, before the sender has to respond which refs it wants to update with what object and then send the packfile to transfer necessary objects. You do not need to change the protocol, nor what the receiving side does, to implement it. You only need to update what the push side does.

It however is entirely a different matter if it is a sensible thing to do.

Often, a fetch is made from a public distribution point, which by definition has only branches and tags that are meant for public consumption. It makes sense to auto-follow tags by default.

On the other hand, a push is almost always made from a private working repository to a public distribution point, in order to update the latter with only refs and objects meant for public consumption. A developer working in such a private working repository will use tags that are not meant for public consumption while developing, and pushing all tags that are reachable from the commits that are being pushed out to the public distribution point is not necessarily desirable, as it will push out many tags that are only private to the working repository.

It certainly is not a sensible default behaviour, even though it might be handy as an option for special cases.

#2 lore raw
Quoted 5 lines · Junio C Hamano
Quoted 3 lines · Alexey I. Froloff

Is is possible to add such functionality to git-push, so it will push tags that point at objects that were uploaded to the remote repository?

[...]

Quoted 15 lines

It however is entirely a different matter if it is a sensible thing to do.

Often, a fetch is made from a public distribution point, which by definition has only branches and tags that are meant for public consumption. It makes sense to auto-follow tags by default.

On the other hand, a push is almost always made from a private working repository to a public distribution point, in order to update the latter with only refs and objects meant for public consumption. A developer working in such a private working repository will use tags that are not meant for public consumption while developing, and pushing all tags that are reachable from the commits that are being pushed out to the public distribution point is not necessarily desirable, as it will push out many tags that are only private to the working repository.

Quoted 2 lines

It certainly is not a sensible default behaviour, even though it might be handy as an option for special cases.

Perhaps if "autofollowing" of tags was enabled only for annotated/signed tags?

Signature · 2 lines
Jakub Narebski
ShadeHawk on #git
#3 lore raw
In reply to Junio C Hamano
Quoted 2 lines · Junio C Hamano

It certainly is not a sensible default behaviour, even though it might be handy as an option for special cases.

I would be happy with --please-push-tags-too and push.follow-tags options (or something similar).

Signature · 2 lines
Regards,
Sir Raorn.
#4 lore raw
In reply to Alexey I. Froloff
Quoted 9 lines · Alexey I. Froloff <raorn <at> altlinux.org> writes:

From git-fetch(1), -n option description: "By default, tags that point at objects that are downloaded from the remote repository are fetched and stored locally."

Is is possible to add such functionality to git-push, so it will push tags that point at objects that were uploaded to the remote repository?

Hi,

git-fetch -n does the opposite: "This option disables this automatic tag following." I guess you wanted to write git-fetch -t.
git-push --tags will help you, but it's a 2 step push: one for the branches and one for the tags. I use .git/config to solve this:

[remote "origin"]

	url = ...
	fetch = +refs/heads/*:refs/remotes/origin/*
	push = +refs/heads/*
	push = +refs/tags/*

With these lines added git-push origin will upload all your branches and tags. If you want to upload only some of them, you can enumerate them.