Revert "submodule: explicit local branch creation in module_clone"
This reverts commit 23d25e48f5
, as it is
broken for users who haven't opted into the new feature of checking
out submodule.*.branch with update mode set to checkout.
maint
parent
edac360bdd
commit
d851ffb91f
|
@ -15,7 +15,7 @@ SYNOPSIS
|
||||||
'git submodule' [--quiet] init [--] [<path>...]
|
'git submodule' [--quiet] init [--] [<path>...]
|
||||||
'git submodule' [--quiet] deinit [-f|--force] [--] <path>...
|
'git submodule' [--quiet] deinit [-f|--force] [--] <path>...
|
||||||
'git submodule' [--quiet] update [--init] [--remote] [-N|--no-fetch]
|
'git submodule' [--quiet] update [--init] [--remote] [-N|--no-fetch]
|
||||||
[-f|--force] [--checkout|--rebase|--merge] [--reference <repository>]
|
[-f|--force] [--rebase|--merge] [--reference <repository>]
|
||||||
[--depth <depth>] [--recursive] [--] [<path>...]
|
[--depth <depth>] [--recursive] [--] [<path>...]
|
||||||
'git submodule' [--quiet] summary [--cached|--files] [(-n|--summary-limit) <n>]
|
'git submodule' [--quiet] summary [--cached|--files] [(-n|--summary-limit) <n>]
|
||||||
[commit] [--] [<path>...]
|
[commit] [--] [<path>...]
|
||||||
|
@ -155,31 +155,13 @@ it contains local modifications.
|
||||||
|
|
||||||
update::
|
update::
|
||||||
Update the registered submodules, i.e. clone missing submodules and
|
Update the registered submodules, i.e. clone missing submodules and
|
||||||
checkout the commit specified in the index of the containing
|
checkout the commit specified in the index of the containing repository.
|
||||||
repository. The update mode defaults to `checkout`, but can be
|
This will make the submodules HEAD be detached unless `--rebase` or
|
||||||
configured with the `submodule.<name>.update` setting or the
|
`--merge` is specified or the key `submodule.$name.update` is set to
|
||||||
`--rebase`, `--merge`, or `--checkout` options.
|
`rebase`, `merge` or `none`. `none` can be overridden by specifying
|
||||||
+
|
`--checkout`. Setting the key `submodule.$name.update` to `!command`
|
||||||
For updates that clone missing submodules, checkout-mode updates will
|
will cause `command` to be run. `command` can be any arbitrary shell
|
||||||
create submodules with detached HEADs; all other modes will create
|
command that takes a single argument, namely the sha1 to update to.
|
||||||
submodules with a local branch named after `submodule.<path>.branch`.
|
|
||||||
+
|
|
||||||
For updates that do not clone missing submodules, the submodule's HEAD
|
|
||||||
is only touched when the remote reference does not match the
|
|
||||||
submodule's HEAD (for none-mode updates, the submodule is never
|
|
||||||
touched). The remote reference is usually the gitlinked commit from
|
|
||||||
the superproject's tree, but with `--remote` it is the upstream
|
|
||||||
subproject's `submodule.<name>.branch`. This remote reference is
|
|
||||||
integrated with the submodule's HEAD using the specified update mode.
|
|
||||||
For checkout-mode updates, that will result in a detached HEAD. For
|
|
||||||
rebase- and merge-mode updates, the commit referenced by the
|
|
||||||
submodule's HEAD may change, but the symbolic reference will remain
|
|
||||||
unchanged (i.e. checked-out branches will still be checked-out
|
|
||||||
branches, and detached HEADs will still be detached HEADs). If none
|
|
||||||
of the builtin modes fit your needs, set `submodule.<name>.update` to
|
|
||||||
`!command` to configure a custom integration command. `command` can
|
|
||||||
be any arbitrary shell command that takes a single argument, namely
|
|
||||||
the sha1 to update to.
|
|
||||||
+
|
+
|
||||||
If the submodule is not yet initialized, and you just want to use the
|
If the submodule is not yet initialized, and you just want to use the
|
||||||
setting as stored in .gitmodules, you can automatically initialize the
|
setting as stored in .gitmodules, you can automatically initialize the
|
||||||
|
|
|
@ -55,10 +55,6 @@ submodule.<name>.branch::
|
||||||
A remote branch name for tracking updates in the upstream submodule.
|
A remote branch name for tracking updates in the upstream submodule.
|
||||||
If the option is not specified, it defaults to 'master'. See the
|
If the option is not specified, it defaults to 'master'. See the
|
||||||
`--remote` documentation in linkgit:git-submodule[1] for details.
|
`--remote` documentation in linkgit:git-submodule[1] for details.
|
||||||
+
|
|
||||||
This branch name is also used for the local branch created by
|
|
||||||
non-checkout cloning updates. See the `update` documentation in
|
|
||||||
linkgit:git-submodule[1] for details.
|
|
||||||
|
|
||||||
submodule.<name>.fetchRecurseSubmodules::
|
submodule.<name>.fetchRecurseSubmodules::
|
||||||
This option can be used to control recursive fetching of this
|
This option can be used to control recursive fetching of this
|
||||||
|
|
|
@ -246,9 +246,6 @@ module_name()
|
||||||
# $3 = URL to clone
|
# $3 = URL to clone
|
||||||
# $4 = reference repository to reuse (empty for independent)
|
# $4 = reference repository to reuse (empty for independent)
|
||||||
# $5 = depth argument for shallow clones (empty for deep)
|
# $5 = depth argument for shallow clones (empty for deep)
|
||||||
# $6 = (remote-tracking) starting point for the local branch (empty for HEAD)
|
|
||||||
# $7 = local branch to create (empty for a detached HEAD, unless $6 is
|
|
||||||
# also empty, in which case the local branch is left unchanged)
|
|
||||||
#
|
#
|
||||||
# Prior to calling, cmd_update checks that a possibly existing
|
# Prior to calling, cmd_update checks that a possibly existing
|
||||||
# path is not a git repository.
|
# path is not a git repository.
|
||||||
|
@ -262,8 +259,6 @@ module_clone()
|
||||||
url=$3
|
url=$3
|
||||||
reference="$4"
|
reference="$4"
|
||||||
depth="$5"
|
depth="$5"
|
||||||
start_point="$6"
|
|
||||||
local_branch="$7"
|
|
||||||
quiet=
|
quiet=
|
||||||
if test -n "$GIT_QUIET"
|
if test -n "$GIT_QUIET"
|
||||||
then
|
then
|
||||||
|
@ -317,16 +312,7 @@ module_clone()
|
||||||
echo "gitdir: $rel/$a" >"$sm_path/.git"
|
echo "gitdir: $rel/$a" >"$sm_path/.git"
|
||||||
|
|
||||||
rel=$(echo $a | sed -e 's|[^/][^/]*|..|g')
|
rel=$(echo $a | sed -e 's|[^/][^/]*|..|g')
|
||||||
(
|
(clear_local_git_env; cd "$sm_path" && GIT_WORK_TREE=. git config core.worktree "$rel/$b")
|
||||||
clear_local_git_env
|
|
||||||
cd "$sm_path" &&
|
|
||||||
GIT_WORK_TREE=. git config core.worktree "$rel/$b" &&
|
|
||||||
# ash fails to wordsplit ${local_branch:+-B "$local_branch"...}
|
|
||||||
case "$local_branch" in
|
|
||||||
'') git checkout -f -q ${start_point:+"$start_point"} ;;
|
|
||||||
?*) git checkout -f -q -B "$local_branch" ${start_point:+"$start_point"} ;;
|
|
||||||
esac
|
|
||||||
) || die "$(eval_gettext "Unable to setup cloned submodule '\$sm_path'")"
|
|
||||||
}
|
}
|
||||||
|
|
||||||
isnumber()
|
isnumber()
|
||||||
|
@ -489,15 +475,16 @@ Use -f if you really want to add it." >&2
|
||||||
echo "$(eval_gettext "Reactivating local git directory for submodule '\$sm_name'.")"
|
echo "$(eval_gettext "Reactivating local git directory for submodule '\$sm_name'.")"
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
if test -n "$branch"
|
module_clone "$sm_path" "$sm_name" "$realrepo" "$reference" "$depth" || exit
|
||||||
then
|
(
|
||||||
start_point="origin/$branch"
|
clear_local_git_env
|
||||||
local_branch="$branch"
|
cd "$sm_path" &&
|
||||||
else
|
# ash fails to wordsplit ${branch:+-b "$branch"...}
|
||||||
start_point=""
|
case "$branch" in
|
||||||
local_branch=""
|
'') git checkout -f -q ;;
|
||||||
fi
|
?*) git checkout -f -q -B "$branch" "origin/$branch" ;;
|
||||||
module_clone "$sm_path" "$sm_name" "$realrepo" "$reference" "$depth" "$start_point" "$local_branch" || exit
|
esac
|
||||||
|
) || die "$(eval_gettext "Unable to checkout submodule '\$sm_path'")"
|
||||||
fi
|
fi
|
||||||
git config submodule."$sm_name".url "$realrepo"
|
git config submodule."$sm_name".url "$realrepo"
|
||||||
|
|
||||||
|
@ -818,9 +805,7 @@ cmd_update()
|
||||||
fi
|
fi
|
||||||
name=$(module_name "$sm_path") || exit
|
name=$(module_name "$sm_path") || exit
|
||||||
url=$(git config submodule."$name".url)
|
url=$(git config submodule."$name".url)
|
||||||
config_branch=$(get_submodule_config "$name" branch)
|
branch=$(get_submodule_config "$name" branch master)
|
||||||
branch="${config_branch:-master}"
|
|
||||||
local_branch="$branch"
|
|
||||||
if ! test -z "$update"
|
if ! test -z "$update"
|
||||||
then
|
then
|
||||||
update_module=$update
|
update_module=$update
|
||||||
|
@ -834,19 +819,11 @@ cmd_update()
|
||||||
|
|
||||||
displaypath=$(relative_path "$prefix$sm_path")
|
displaypath=$(relative_path "$prefix$sm_path")
|
||||||
|
|
||||||
case "$update_module" in
|
if test "$update_module" = "none"
|
||||||
none)
|
then
|
||||||
echo "Skipping submodule '$displaypath'"
|
echo "Skipping submodule '$displaypath'"
|
||||||
continue
|
continue
|
||||||
;;
|
fi
|
||||||
checkout)
|
|
||||||
local_branch=""
|
|
||||||
;;
|
|
||||||
rebase | merge | !*)
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
die "$(eval_gettext "Invalid update mode '$update_module' for submodule '$name'")"
|
|
||||||
esac
|
|
||||||
|
|
||||||
if test -z "$url"
|
if test -z "$url"
|
||||||
then
|
then
|
||||||
|
@ -860,8 +837,7 @@ Maybe you want to use 'update --init'?")"
|
||||||
|
|
||||||
if ! test -d "$sm_path"/.git -o -f "$sm_path"/.git
|
if ! test -d "$sm_path"/.git -o -f "$sm_path"/.git
|
||||||
then
|
then
|
||||||
start_point="origin/${branch}"
|
module_clone "$sm_path" "$name" "$url" "$reference" "$depth" || exit
|
||||||
module_clone "$sm_path" "$name" "$url" "$reference" "$depth" "$start_point" "$local_branch" || exit
|
|
||||||
cloned_modules="$cloned_modules;$name"
|
cloned_modules="$cloned_modules;$name"
|
||||||
subsha1=
|
subsha1=
|
||||||
else
|
else
|
||||||
|
@ -907,7 +883,7 @@ Maybe you want to use 'update --init'?")"
|
||||||
case ";$cloned_modules;" in
|
case ";$cloned_modules;" in
|
||||||
*";$name;"*)
|
*";$name;"*)
|
||||||
# then there is no local change to integrate
|
# then there is no local change to integrate
|
||||||
update_module='!git reset --hard -q'
|
update_module=checkout ;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
must_die_on_failure=
|
must_die_on_failure=
|
||||||
|
|
|
@ -63,9 +63,6 @@ test_expect_success 'setup a submodule tree' '
|
||||||
git submodule add ../none none &&
|
git submodule add ../none none &&
|
||||||
test_tick &&
|
test_tick &&
|
||||||
git commit -m "none"
|
git commit -m "none"
|
||||||
) &&
|
|
||||||
(cd super &&
|
|
||||||
git tag initial-setup
|
|
||||||
)
|
)
|
||||||
'
|
'
|
||||||
|
|
||||||
|
@ -706,7 +703,7 @@ test_expect_success 'submodule update places git-dir in superprojects git-dir re
|
||||||
git clone super_update_r super_update_r2 &&
|
git clone super_update_r super_update_r2 &&
|
||||||
(cd super_update_r2 &&
|
(cd super_update_r2 &&
|
||||||
git submodule update --init --recursive >actual &&
|
git submodule update --init --recursive >actual &&
|
||||||
test_i18ngrep "Submodule path .submodule/subsubmodule.: .git reset --hard -q" actual &&
|
test_i18ngrep "Submodule path .submodule/subsubmodule.: checked out" actual &&
|
||||||
(cd submodule/subsubmodule &&
|
(cd submodule/subsubmodule &&
|
||||||
git log > ../../expected
|
git log > ../../expected
|
||||||
) &&
|
) &&
|
||||||
|
@ -777,38 +774,4 @@ test_expect_success 'submodule update --recursive drops module name before recur
|
||||||
test_i18ngrep "Submodule path .deeper/submodule/subsubmodule.: checked out" actual
|
test_i18ngrep "Submodule path .deeper/submodule/subsubmodule.: checked out" actual
|
||||||
)
|
)
|
||||||
'
|
'
|
||||||
|
|
||||||
test_expect_success 'submodule update --checkout clones detached HEAD' '
|
|
||||||
git clone super super4 &&
|
|
||||||
echo "detached HEAD" >expected &&
|
|
||||||
(cd super4 &&
|
|
||||||
git reset --hard initial-setup &&
|
|
||||||
git submodule init submodule &&
|
|
||||||
git submodule update >> /tmp/log 2>&1 &&
|
|
||||||
(cd submodule &&
|
|
||||||
git symbolic-ref HEAD > ../../actual ||
|
|
||||||
echo "detached HEAD" > ../../actual
|
|
||||||
)
|
|
||||||
) &&
|
|
||||||
test_cmp actual expected &&
|
|
||||||
rm -rf super4
|
|
||||||
'
|
|
||||||
|
|
||||||
test_expect_success 'submodule update --merge clones attached HEAD' '
|
|
||||||
git clone super super4 &&
|
|
||||||
echo "refs/heads/master" >expected &&
|
|
||||||
(cd super4 &&
|
|
||||||
git reset --hard initial-setup &&
|
|
||||||
git submodule init submodule &&
|
|
||||||
git config submodule.submodule.update merge &&
|
|
||||||
git submodule update --merge &&
|
|
||||||
(cd submodule &&
|
|
||||||
git symbolic-ref HEAD > ../../actual ||
|
|
||||||
echo "detached HEAD" > ../../actual
|
|
||||||
)
|
|
||||||
) &&
|
|
||||||
test_cmp actual expected &&
|
|
||||||
rm -rf super4
|
|
||||||
'
|
|
||||||
|
|
||||||
test_done
|
test_done
|
||||||
|
|
Loading…
Reference in New Issue