When doing a git submodule update, it fetches any missing submodule commits from the repository specified in .gitmodules. If you instead want to pull from another repository, you currently need to do a fetch in each submodule by hand. Signed-off-by: Nigel Magnay <nigel.magnay@xxxxxxxxx> --- This is my first attempt at adding things to help everyday usage of git submodule. I don't usually write much shell script; and it's my first patch, so it's possible there are better ways to do these things.. git-submodule.sh | 33 +++++++++++++++++++++++++++++++-- 1 files changed, 31 insertions(+), 2 deletions(-) diff --git a/git-submodule.sh b/git-submodule.sh index 9228f56..40e1aa1 100755 --- a/git-submodule.sh +++ b/git-submodule.sh @@ -5,7 +5,7 @@ # Copyright (c) 2007 Lars Hjemli 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] [-o|--origin <repository>] [-r|-refspec <refspec>]|summary [-n|--summary-limit <n>] [<commit>]] \ [--] [<path>...]" OPTIONS_SPEC= . git-sh-setup @@ -15,6 +15,8 @@ command= branch= quiet= cached= +repository= +refspec= # # print stuff on stdout unless -q was specified @@ -270,6 +272,14 @@ cmd_update() shift cmd_init "$@" || return ;; + -o|--origin) + shift + repository=$1 + ;; + -r|--refspec) + shift + refspec=$1 + ;; --) shift break @@ -311,7 +321,9 @@ cmd_update() if test "$subsha1" != "$sha1" then - (unset GIT_DIR; cd "$path" && git-fetch && + set_submodule_repository "$repository" "$path" + + (unset GIT_DIR; cd "$path" && git-fetch "$subrepo" "$refspec" && git-checkout -q "$sha1") || die "Unable to checkout '$sha1' in submodule path '$path'" @@ -320,6 +332,23 @@ cmd_update() done } +# +# If we asked for a repository such as 'origin', just pass this through +# otherwise, try to calculate what the repository URL might be by +# adding the submodule path to the url, subtracting any /.git first +# +set_submodule_repository() { + + if [ -z `echo "$1" | grep '/'` ] + then + # This is not a URL - just use the name + subrepo="$1" + else + # This is a URL. Chop off /.git if it's there, and add submodule path + subrepo="${1/%\/.git/}/$2" + fi +} + set_name_rev () { revname=$( ( unset GIT_DIR -- 1.5.6.2 -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html