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