git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Fetching single tag in shallow clone almost unshallow the clone

From
Bagas Sanjaya <bagasdotme@gmail.com>
Date
May 28, 2021, 07:03 UTC
Message-ID
<304633fd-e677-7956-6787-f60f195db9b5@gmail.com>
Hi,

I have a copy of Golang repository [1] on my local Git server on my computer. I'm experimenting with fetching single tags in shallow clone.

I begin with shallow clone the repo:

$ git clone https://<myhost>/path/to/go.git --depth 200 golang $ cd golang

Because only one, default branch (master) is checked out on shallow clone, I fetch latest release branch shallowly:

$ git remote set-branches --add origin release-branch.go1.16 $ git fetch origin release-branch.go1.16 --depth 25

Then I fetch single tag only, that is latest tagged release:
$ git fetch origin tag go1.16.4 --no-tags
> From https://<myhost>/path/to/go
>  * [new tag]           go1.16.4   -> go1.16.4

That above worked, because the commit the tag refers to is already on the clone.

But when I fetch a single tag which the commit the tag refers to isn't already on the clone, Git fetched almost the entire history (thus almost unshallow the clone):

$ git fetch origin tag go1.16.1 --no-tags
Show 8 quoted lines
> remote: Enumerating objects: 436644, done.
> remote: Counting objects: 100% (427655/427655), done.
> remote: Compressing objects: 100% (75334/75334), done.
> remote: Total 419698 (delta 343975), reused 416121 (delta 341201), pack-reused 0
> Receiving objects: 100% (419698/419698), 146.94 MiB | 16.06 MiB/s, done.
> Resolving deltas: 100% (343975/343975), completed with 4892 local objects.
> From https://gitnode.io/bagas/go
>  * [new tag]           go1.16.1   -> go1.16.1

I expect that instead Git will deepen the shallow clone until the specified tag.

Note that I used "almost unshallow" phrase, because although almost the whole history had been fetched, `.git/shallow` still exists, meant that the clone was still shallow. To convert to full clone, I did `git fetch --unshallow`, which also fetched tags referenced on either master or already configured released branches.

Thanks.
[1]: https://github.com/golang/go
-- 
An old man doll... just what I always wanted! - Clara
Next: Derrick Stolee
Message 1 of 3 in “Fetching single tag in shallow clone almost unshallow the clone”
  1. Bagas SanjayaMay 28, 2021
  2. Derrick StoleeMay 28, 2021
  3. Bagas SanjayaMay 28, 2021

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.