Skip to content

Commit 18a74a0

Browse files
committed
clone: do not let --depth imply --shallow-submodules
In v2.9.0, we prematurely flipped the default to force cloning submodules shallowly, when the superproject is getting cloned shallowly. This is likely to fail when the upstream repositories submodules are cloned from a repository that is not prepared to serve histories that ends at a commit that is not at the tip of a branch, and we know the world is not yet ready. Use a safer default to clone the submodules fully, unless the user tells us that she knows that the upstream repository of the submodules are willing to cooperate with "--shallow-submodules" option. Noticed-by: Vadim Eisenberg <[email protected]> Helped-by: Jeff King <[email protected]> Helped-by: Stefan Beller <[email protected]> Signed-off-by: Junio C Hamano <[email protected]>
1 parent d22eb04 commit 18a74a0

File tree

3 files changed

+21
-8
lines changed

3 files changed

+21
-8
lines changed

Documentation/git-clone.txt

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -192,9 +192,8 @@ objects from the source repository into a pack in the cloned repository.
192192
Create a 'shallow' clone with a history truncated to the
193193
specified number of revisions. Implies `--single-branch` unless
194194
`--no-single-branch` is given to fetch the histories near the
195-
tips of all branches. This implies `--shallow-submodules`. If
196-
you want to have a shallow superproject clone, but full submodules,
197-
also pass `--no-shallow-submodules`.
195+
tips of all branches. If you want to clone submodules shallowly,
196+
also pass `--shallow-submodules`.
198197

199198
--[no-]single-branch::
200199
Clone only the history leading to the tip of a single branch,

builtin/clone.c

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ static const char * const builtin_clone_usage[] = {
4040

4141
static int option_no_checkout, option_bare, option_mirror, option_single_branch = -1;
4242
static int option_local = -1, option_no_hardlinks, option_shared, option_recursive;
43-
static int option_shallow_submodules = -1;
43+
static int option_shallow_submodules;
4444
static char *option_template, *option_depth;
4545
static char *option_origin = NULL;
4646
static char *option_branch = NULL;
@@ -730,8 +730,7 @@ static int checkout(void)
730730
struct argv_array args = ARGV_ARRAY_INIT;
731731
argv_array_pushl(&args, "submodule", "update", "--init", "--recursive", NULL);
732732

733-
if (option_shallow_submodules == 1
734-
|| (option_shallow_submodules == -1 && option_depth))
733+
if (option_shallow_submodules == 1)
735734
argv_array_push(&args, "--depth=1");
736735

737736
if (max_jobs != -1)

t/t5614-clone-submodules.sh

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,9 +37,9 @@ test_expect_success 'nonshallow clone implies nonshallow submodule' '
3737
)
3838
'
3939

40-
test_expect_success 'shallow clone implies shallow submodule' '
40+
test_expect_success 'shallow clone with shallow submodule' '
4141
test_when_finished "rm -rf super_clone" &&
42-
git clone --recurse-submodules --depth 2 "file://$pwd/." super_clone &&
42+
git clone --recurse-submodules --depth 2 --shallow-submodules "file://$pwd/." super_clone &&
4343
(
4444
cd super_clone &&
4545
git log --oneline >lines &&
@@ -52,6 +52,21 @@ test_expect_success 'shallow clone implies shallow submodule' '
5252
)
5353
'
5454

55+
test_expect_success 'shallow clone does not imply shallow submodule' '
56+
test_when_finished "rm -rf super_clone" &&
57+
git clone --recurse-submodules --depth 2 "file://$pwd/." super_clone &&
58+
(
59+
cd super_clone &&
60+
git log --oneline >lines &&
61+
test_line_count = 2 lines
62+
) &&
63+
(
64+
cd super_clone/sub &&
65+
git log --oneline >lines &&
66+
test_line_count = 3 lines
67+
)
68+
'
69+
5570
test_expect_success 'shallow clone with non shallow submodule' '
5671
test_when_finished "rm -rf super_clone" &&
5772
git clone --recurse-submodules --depth 2 --no-shallow-submodules "file://$pwd/." super_clone &&

0 commit comments

Comments
 (0)