git-submodule: add support for --rebase.
'git submodule update --rebase' rebases your local branch on top of what would have been checked out to a detached HEAD otherwise. In some cases, detaching the HEAD when updating a submodule complicates the workflow to commit to this submodule (checkout master, rebase, then commit). For submodules that require frequent updates but infrequent (if any) commits, a rebase can be executed directly by the git-submodule command, ensuring that the submodules stay on their respective branches. git-config key: submodule.$name.rebase (bool) Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net> Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
committed by
Junio C Hamano
parent
ea0b767c1e
commit
ca2cedba70
@ -17,6 +17,7 @@ branch=
|
||||
quiet=
|
||||
cached=
|
||||
nofetch=
|
||||
rebase=
|
||||
|
||||
#
|
||||
# print stuff on stdout unless -q was specified
|
||||
@ -294,6 +295,11 @@ cmd_init()
|
||||
git config submodule."$name".url "$url" ||
|
||||
die "Failed to register url for submodule path '$path'"
|
||||
|
||||
test true != "$(git config -f .gitmodules --bool \
|
||||
submodule."$name".rebase)" ||
|
||||
git config submodule."$name".rebase true ||
|
||||
die "Failed to register submodule path '$path' as rebasing"
|
||||
|
||||
say "Submodule '$name' ($url) registered for path '$path'"
|
||||
done
|
||||
}
|
||||
@ -321,6 +327,10 @@ cmd_update()
|
||||
shift
|
||||
nofetch=1
|
||||
;;
|
||||
-r|--rebase)
|
||||
shift
|
||||
rebase=true
|
||||
;;
|
||||
--)
|
||||
shift
|
||||
break
|
||||
@ -339,6 +349,7 @@ cmd_update()
|
||||
do
|
||||
name=$(module_name "$path") || exit
|
||||
url=$(git config submodule."$name".url)
|
||||
rebase_module=$(git config --bool submodule."$name".rebase)
|
||||
if test -z "$url"
|
||||
then
|
||||
# Only mention uninitialized submodules when its
|
||||
@ -359,6 +370,11 @@ cmd_update()
|
||||
die "Unable to find current revision in submodule path '$path'"
|
||||
fi
|
||||
|
||||
if test true = "$rebase"
|
||||
then
|
||||
rebase_module=true
|
||||
fi
|
||||
|
||||
if test "$subsha1" != "$sha1"
|
||||
then
|
||||
force=
|
||||
@ -374,11 +390,20 @@ cmd_update()
|
||||
die "Unable to fetch in submodule path '$path'"
|
||||
fi
|
||||
|
||||
(unset GIT_DIR; cd "$path" &&
|
||||
git-checkout $force -q "$sha1") ||
|
||||
die "Unable to checkout '$sha1' in submodule path '$path'"
|
||||
if test true = "$rebase_module"
|
||||
then
|
||||
command="git-rebase"
|
||||
action="rebase"
|
||||
msg="rebased onto"
|
||||
else
|
||||
command="git-checkout $force -q"
|
||||
action="checkout"
|
||||
msg="checked out"
|
||||
fi
|
||||
|
||||
say "Submodule path '$path': checked out '$sha1'"
|
||||
(unset GIT_DIR; cd "$path" && $command "$sha1") ||
|
||||
die "Unable to $action '$sha1' in submodule path '$path'"
|
||||
say "Submodule path '$path': $msg '$sha1'"
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user