Hi,
On Thu, 26 Feb 2009, Jeff King wrote:
On Thu, Feb 26, 2009 at 08:34:51AM +0200, Teemu Likonen wrote:
quoted
On 2009-02-25 19:49 (-0800), roylee17 wrote:
quoted
$ 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