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

Re: Does cloning a shallow repo require special setting in the cloned one?

From
Johannes Schindelin <johannes.schindelin@gmx.de>
Date
Feb 26, 2009, 11:17 UTC
Message-ID
<alpine.DEB.1.00.0902261216110.6258@intel-tinevez-2-302>
In-Reply-To
<20090226104657.GB4226@coredump.intra.peff.net>
Hi,
On Thu, 26 Feb 2009, Jeff King wrote:
Show 25 quoted lines
> On Thu, Feb 26, 2009 at 08:34:51AM +0200, Teemu Likonen wrote:
> 
> > On 2009-02-25 19:49 (-0800), roylee17 wrote:
> > 
> > > $ git clone --depth 1 git-full git-shallow2
> > > 'git log' still gives a full history
> > >
> > > Why can't I clone a shallow repo from the git-full?
> > > Does it requires some settings in the git-full repo?
> > 
> > I don't know the "why" part but using file:// URL should work:
> > 
> >     git clone --depth 1 file:///path/to/git-full git-shallow2
> 
> I don't think the behavior is intentional, but a side effect of the
> fact that git takes some shortcuts when cloning locally. In particular,
> it will try to copy or hardlink the object database rather than
> transmitting over the git protocol locally. Using file:// has always
> been the way to suppress that shortcut.
> 
> Perhaps to avoid surprise, that optimization should be turned off for
> options which cause it to behave differently (like --depth). But I have
> to wonder what the point of --depth is locally; if you are worried about
> space, hardlinks (the default) or alternates ("clone -s") are a better
> solution.

I think it is way better to warn, since "--depth" is usually passed out of concerns about disk space. And --shared should shut that concern up rather nicely.

diff --git a/builtin-clone.c b/builtin-clone.c
index c338910..5831034 100644
--- a/builtin-clone.c
+++ b/builtin-clone.c
@@ -511,8 +511,11 @@ int cmd_clone(int argc, const char **argv, const char *prefix)
 	refspec.src = src_ref_prefix;
 	refspec.dst = branch_top.buf;
 
-	if (path && !is_bundle)
+	if (path && !is_bundle) {
+		if (option_depth)
+			warning("Ignoring --depth for local clone");
 		refs = clone_local(path, git_dir);
+	}
 	else {
 		struct remote *remote = remote_get(argv[0]);
 		transport = transport_get(remote, remote->url[0]);

Lacks tests,
Dscho
Previous: Jeff KingNext: Jeff King
Message 5 of 8 in “Does cloning a shallow repo require special setting in the cloned one?”
  1. roylee17Feb 26, 2009
  2. Teemu LikonenFeb 26, 2009
  3. Roy LeeFeb 26, 2009
  4. Jeff KingFeb 26, 2009
  5. Johannes SchindelinFeb 26, 2009
  6. Jeff KingFeb 26, 2009
  7. Roy LeeFeb 26, 2009
  8. Jakub NarebskiFeb 27, 2009

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.