When adding new submodules, you can specify the group(s) the submodule belongs to by giving one or more --group arguments. This will record each group in the .gitmodules file as a value of the key "submodule.$NAME.group". Signed-off-by: Stefan Beller <sbeller@xxxxxxxxxx> --- Documentation/git-submodule.txt | 8 +++++++- git-submodule.sh | 15 +++++++++++++++ t/t7400-submodule-basic.sh | 32 ++++++++++++++++++++++++++++++++ 3 files changed, 54 insertions(+), 1 deletion(-) diff --git a/Documentation/git-submodule.txt b/Documentation/git-submodule.txt index 13adebf..135c739 100644 --- a/Documentation/git-submodule.txt +++ b/Documentation/git-submodule.txt @@ -9,7 +9,7 @@ git-submodule - Initialize, update or inspect submodules SYNOPSIS -------- [verse] -'git submodule' [--quiet] add [-b <branch>] [-f|--force] [--name <name>] +'git submodule' [--quiet] add [-b <branch>] [-f|--force] [-g <group>][--name <name>] [--reference <repository>] [--depth <depth>] [--] <repository> [<path>] 'git submodule' [--quiet] status [--cached] [--recursive] [--] [<path>...] 'git submodule' [--quiet] init [--] [<path>...] @@ -59,6 +59,9 @@ instead of treating the other project as a submodule. Directories that come from both projects can be cloned and checked out as a whole if you choose to go that route. +If you manage a large set of submodules, but do not require all of them +to be checked out, you should look into the submodule groups feature. + COMMANDS -------- add:: @@ -101,6 +104,9 @@ is the superproject and submodule repositories will be kept together in the same relative location, and only the superproject's URL needs to be provided: git-submodule will correctly locate the submodule using the relative URL in .gitmodules. ++ +If at least one group argument was given, all groups are recorded in the +.gitmodules file in the groups field. status:: Show the status of the submodules. This will print the SHA-1 of the diff --git a/git-submodule.sh b/git-submodule.sh index 6fce0dc..ab0f209 100755 --- a/git-submodule.sh +++ b/git-submodule.sh @@ -130,6 +130,7 @@ cmd_add() { # parse $args after "submodule ... add". reference_path= + submodule_groups= while test $# -ne 0 do case "$1" in @@ -165,6 +166,10 @@ cmd_add() --depth=*) depth=$1 ;; + -g|--group) + submodule_groups=${submodule_groups:+${submodule_groups};}"$2" + shift + ;; --) shift break @@ -292,6 +297,16 @@ Use -f if you really want to add it." >&2 git config -f .gitmodules submodule."$sm_name".path "$sm_path" && git config -f .gitmodules submodule."$sm_name".url "$repo" && + if test -n "$submodule_groups" + then + OIFS=$IFS + IFS=';' + for group in $submodule_groups + do + git config --add -f .gitmodules submodule."$sm_name".group "${group}" + done + IFS=$OIFS + fi && if test -n "$branch" then git config -f .gitmodules submodule."$sm_name".branch "$branch" diff --git a/t/t7400-submodule-basic.sh b/t/t7400-submodule-basic.sh index 5991e3c..b468278 100755 --- a/t/t7400-submodule-basic.sh +++ b/t/t7400-submodule-basic.sh @@ -986,6 +986,7 @@ test_expect_success 'submodule with UTF-8 name' ' ' test_expect_success 'submodule add clone shallow submodule' ' + test_when_finished "rm -rf super" && mkdir super && pwd=$(pwd) && ( @@ -999,5 +1000,36 @@ test_expect_success 'submodule add clone shallow submodule' ' ) ' +test_expect_success 'submodule add records a group' ' + test_when_finished "rm -rf super" && + mkdir super && + pwd=$(pwd) && + ( + cd super && + git init && + git submodule add --group groupA file://"$pwd"/example2 submodule && + git config -f .gitmodules submodule."submodule".group >actual && + echo groupA >expected && + test_cmp expected actual + ) +' + +cat >expected <<-EOF +groupA +groupB +EOF + +test_expect_success 'submodule add records groups' ' + test_when_finished "rm -rf super" && + mkdir super && + pwd=$(pwd) && + ( + cd super && + git init && + git submodule add --group groupA -g groupB file://"$pwd"/example2 submodule && + git config --get-all -f .gitmodules submodule."submodule".group >../actual + ) && + test_cmp expected actual +' test_done -- 2.7.0.rc0.41.g89994f2.dirty -- 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