If the update subcommand combines with --force, non-submodules (i.e. modules existing in .gitmodules or $GIT_DIR/config but not added to the super module) will be cloned and the master branch will be checked out. However, if a non-submodule has already been cloned before, the update will be rejected since we don't know what the update means. Signed-off-by: Ping Yin <pkufranky@xxxxxxxxx> --- git-submodule.sh | 14 +++++++++++++- 1 files changed, 13 insertions(+), 1 deletions(-) diff --git a/git-submodule.sh b/git-submodule.sh index b4db676..153b61e 100755 --- a/git-submodule.sh +++ b/git-submodule.sh @@ -384,6 +384,9 @@ cmd_update() -q|--quiet) quiet=1 ;; + -f | --force) + force="$1" + ;; --) shift break @@ -406,7 +409,8 @@ cmd_update() test -z "$name" && exit_status=1 && continue if test $sha1 = 0000000000000000000000000000000000000000 then - say "Not a submodule: $name @ $path" + test -z "$force" && + say "Not a submodule: $name @ $path" && continue elif test -z "$url" then @@ -420,8 +424,15 @@ cmd_update() if ! test -d "$path"/.git then ! module_clone "$path" "$url" && exit_status=1 && continue + test "$sha1" = 0000000000000000000000000000000000000000 && + (unset GIT_DIR; cd "$path" && git checkout -q master) && + say "non-submodule cloned and master checked out: $name @ $path" && + continue subsha1= else + test "$sha1" = 0000000000000000000000000000000000000000 && + say "non-submodule already cloned: $name @ $path" && + continue subsha1=$(unset GIT_DIR; cd "$path" && git rev-parse --verify HEAD) || { @@ -431,6 +442,7 @@ cmd_update() } fi + if test "$subsha1" != "$sha1" then (unset GIT_DIR; cd "$path" && git-fetch && -- 1.5.5.23.g2a5f -- 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