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

Re: clone (single) commit id?

From
Jeff King <peff@peff.net>
Date
Aug 17, 2023, 19:56 UTC
Message-ID
<20230817195641.GD3032779@coredump.intra.peff.net>
In-Reply-To
<CABtpZSGcL8hkk3HA3ECtt7KeLPOhuB0n7EKN1Tg5ZHpFBE0V0A@mail.gmail.com>
On Thu, Aug 17, 2023 at 09:45:19PM +0200, Patrik Hägglund wrote:
Show 13 quoted lines
> In our CI setup, for reproducibility and performance reasons, I want
> to be able to clone a repository with only a single given commit id
> (commit hash). (Using 'git init' + 'git fetch' + 'git checkout' is
> possible, but more elaborate/low-level.)
> 
> At https://lore.kernel.org/git/MN2PR12MB3616C1F2E97A18547740651DF9E29@MN2PR12MB3616.namprd12.prod.outlook.com/
> it is stated that:
> 
> > Never mind, I see, feature exists but server needs to allow it. Sigh.
> 
> However, I'm not able to find this in the Git documentation. Can
> someone point out how to configure this? Can this be better
> documented?
I'd use a shallow clone with depth 1, like:
  git clone -b $your_branch --depth 1 $remote_url

Note that "--depth" implies --single-branch, so it will really just grab that one branch (and if it's the remote's default branch that you want, you can omit the "-b $your_branch" part).

If you find the shape of history useful (e.g., your CI wants to look at just new commits), you might also find partial clones useful. Something like:

  git clone --filter=blob:none $remote_url

will fetch all commits and trees, but only load blobs on-demand (so basically whatever is needed to check out that tip commit). You can pare it down further by switching to "--filter=tree:0", which will avoid trees (but note that filling in trees when you need them is a bit more expensive, since inherently you have to make a round-trip to the server for each level of tree).

-Peff
Previous: Patrik HägglundNext: Patrik Hägglund
Message 2 of 4 in “clone (single) commit id?”
  1. Patrik HägglundAug 17, 2023
  2. Jeff KingAug 17, 2023
  3. Patrik HägglundAug 17, 2023
  4. Jeff KingAug 17, 2023

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.