From: "Randall S. Becker" <rsbecker@nexbridge.com>
To: "'Jeff King'" <peff@peff.net>,
"'Dominik Salvet'" <dominik.salvet@gmail.com>
Cc: <git@vger.kernel.org>
Subject: RE: Fetching master branch with tags associated with it
Date: Fri, 22 Feb 2019 11:35:11 -0500 [thread overview]
Message-ID: <000801d4cacc$981e2ac0$c85a8040$@nexbridge.com> (raw)
In-Reply-To: <20190222160722.GA22531@sigill.intra.peff.net>
On February 22, 2019 11:07, Jeff King wrote:
> To: Dominik Salvet <dominik.salvet@gmail.com>
> Cc: git@vger.kernel.org
> Subject: Re: Fetching master branch with tags associated with it
>
> On Thu, Feb 21, 2019 at 06:02:54PM +0100, Dominik Salvet wrote:
>
> > Now, I want to refresh the repository the same way - fetching only
> > commits from the master branch and tags that are pointing to the
> > master branch and also refresh those tags as well in case of their
> > target commit change at the remote (you can expect that it always
> > points to a master commit). Nevertheless, I don't really know how to
> > do it. The closest I got, are the following commands:
> >
> > ```sh
> > git fetch --tags origin master &&
> > git merge FETCH_HEAD
> > ```
> >
> > However, there obviously are some problems with this solution. The
> > `--tags` flag will cause to fetch tags from all branches. Furthermore,
> > it will fetch also their commits, which is absolutely what I don't
> > want to.
> >
> > I have Git 2.17.1 (on Ubuntu 18.04.2) and in its `git fetch --help` is
> > stated, if I understood it correctly, that without passing neither
> > `--tags` nor `--no-tags`, it will do exactly what I want.
> > Nevertheless, without using any of the mentioned flags, it behaves
> > more like using `--no-tags`.
>
> Generally yes, that's how it's supposed to work. However, I think tag-
> following does not kick in when you've given a specific refspec.
>
> So take this toy setup for example:
>
> -- >8 --
> git init repo
> cd repo
>
> # one tags accessible from master
> git commit --allow-empty -m one
> git tag one
>
> # one tag accessible only from "other"
> git checkout -b other
> git commit --allow-empty -m two
> git tag two
>
> # now fetch into another repository
> git init child
> cd child
> git remote add origin ..
> git fetch origin master
> -- 8< --
>
> That won't pick up the "one" tag in that final fetch. But if you use the normal
> configured refspec (but tell it only to grab "master"):
>
> git config remote.origin.fetch
> refs/heads/master:refs/remotes/origin/master
> git fetch origin
>
> then it works. I don't know if there's a less-awkward way to get what you
> want, though. It really seems like there should be a "--tags=follow"
> or similar.
This may be restating, but I had a received request a while back to fetch only tags commits known to the repository. The scenario here is as follows:
git clone --depth=1 url-ish
git fetch --depth=1 --tags
This actually fetches all tags and expands the depth of the repository to the whole history to provide the basis for all of the tags. What I would have anticipated is that the HEAD commit from the depth=1, if it had a tag, would fetch that tag, and then expand the history of the tag in support of it, but only if the tag were signed. If the tag is not signed, I'm not sure that the history to build it is required, since the same argument could be made for the HEAD commit itself. If there was no tag on the HEAD commit, there would be no tag fetched in this situation.
So to further the request above, a fetch of tags of known unsigned tags seems reasonable, in a depth restricted situation or a branch limited situation. In an island of sparceness situation, with gaps in the history, I can see how git describe would give wildly wrong answers, but having those gaps could break the validation of signed tags anyway.
Of course, my expectations may be completely wrong here.
Regards,
Randall
prev parent reply other threads:[~2019-02-22 16:35 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-02-21 17:02 Fetching master branch with tags associated with it Dominik Salvet
2019-02-22 16:07 ` Jeff King
2019-02-22 16:35 ` Randall S. Becker [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to='000801d4cacc$981e2ac0$c85a8040$@nexbridge.com' \
--to=rsbecker@nexbridge.com \
--cc=dominik.salvet@gmail.com \
--cc=git@vger.kernel.org \
--cc=peff@peff.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).