git-submodule: add "sync" command
When a submodule's URL changes upstream, existing submodules will be out of sync since their remote."$origin".url will still be set to the old value. This adds a "git submodule sync" command that reads submodules' URLs from .gitmodules and updates them accordingly. Signed-off-by: David Aguilar <davvid@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
27a6ed492b
commit
2327f61ecc
@ -15,6 +15,7 @@ SYNOPSIS
|
|||||||
'git submodule' [--quiet] update [--init] [--] [<path>...]
|
'git submodule' [--quiet] update [--init] [--] [<path>...]
|
||||||
'git submodule' [--quiet] summary [--summary-limit <n>] [commit] [--] [<path>...]
|
'git submodule' [--quiet] summary [--summary-limit <n>] [commit] [--] [<path>...]
|
||||||
'git submodule' [--quiet] foreach <command>
|
'git submodule' [--quiet] foreach <command>
|
||||||
|
'git submodule' [--quiet] sync [--] [<path>...]
|
||||||
|
|
||||||
|
|
||||||
DESCRIPTION
|
DESCRIPTION
|
||||||
@ -139,6 +140,14 @@ foreach::
|
|||||||
As an example, "git submodule foreach 'echo $path `git rev-parse HEAD`' will
|
As an example, "git submodule foreach 'echo $path `git rev-parse HEAD`' will
|
||||||
show the path and currently checked out commit for each submodule.
|
show the path and currently checked out commit for each submodule.
|
||||||
|
|
||||||
|
sync::
|
||||||
|
Synchronizes submodules' remote URL configuration setting
|
||||||
|
to the value specified in .gitmodules. This is useful when
|
||||||
|
submodule URLs change upstream and you need to update your local
|
||||||
|
repositories accordingly.
|
||||||
|
+
|
||||||
|
"git submodule sync" synchronizes all submodules while
|
||||||
|
"git submodule sync -- A" synchronizes submodule "A" only.
|
||||||
|
|
||||||
OPTIONS
|
OPTIONS
|
||||||
-------
|
-------
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
|
|
||||||
USAGE="[--quiet] [--cached] \
|
USAGE="[--quiet] [--cached] \
|
||||||
[add <repo> [-b branch] <path>]|[status|init|update [-i|--init]|summary [-n|--summary-limit <n>] [<commit>]] \
|
[add <repo> [-b branch] <path>]|[status|init|update [-i|--init]|summary [-n|--summary-limit <n>] [<commit>]] \
|
||||||
[--] [<path>...]|[foreach <command>]"
|
[--] [<path>...]|[foreach <command>]|[sync [--] [<path>...]]"
|
||||||
OPTIONS_SPEC=
|
OPTIONS_SPEC=
|
||||||
. git-sh-setup
|
. git-sh-setup
|
||||||
. git-parse-remote
|
. git-parse-remote
|
||||||
@ -601,6 +601,50 @@ cmd_status()
|
|||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
}
|
}
|
||||||
|
#
|
||||||
|
# Sync remote urls for submodules
|
||||||
|
# This makes the value for remote.$remote.url match the value
|
||||||
|
# specified in .gitmodules.
|
||||||
|
#
|
||||||
|
cmd_sync()
|
||||||
|
{
|
||||||
|
while test $# -ne 0
|
||||||
|
do
|
||||||
|
case "$1" in
|
||||||
|
-q|--quiet)
|
||||||
|
quiet=1
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
--)
|
||||||
|
shift
|
||||||
|
break
|
||||||
|
;;
|
||||||
|
-*)
|
||||||
|
usage
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
break
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
cd_to_toplevel
|
||||||
|
module_list "$@" |
|
||||||
|
while read mode sha1 stage path
|
||||||
|
do
|
||||||
|
name=$(module_name "$path")
|
||||||
|
url=$(git config -f .gitmodules --get submodule."$name".url)
|
||||||
|
if test -e "$path"/.git
|
||||||
|
then
|
||||||
|
(
|
||||||
|
unset GIT_DIR
|
||||||
|
cd "$path"
|
||||||
|
remote=$(get_default_remote)
|
||||||
|
say "Synchronizing submodule url for '$name'"
|
||||||
|
git config remote."$remote".url "$url"
|
||||||
|
)
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
# This loop parses the command line arguments to find the
|
# This loop parses the command line arguments to find the
|
||||||
# subcommand name to dispatch. Parsing of the subcommand specific
|
# subcommand name to dispatch. Parsing of the subcommand specific
|
||||||
@ -611,7 +655,7 @@ cmd_status()
|
|||||||
while test $# != 0 && test -z "$command"
|
while test $# != 0 && test -z "$command"
|
||||||
do
|
do
|
||||||
case "$1" in
|
case "$1" in
|
||||||
add | foreach | init | update | status | summary)
|
add | foreach | init | update | status | summary | sync)
|
||||||
command=$1
|
command=$1
|
||||||
;;
|
;;
|
||||||
-q|--quiet)
|
-q|--quiet)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user