pf-gitmodule.ps1

function Sync-Git_Module {
    $folder = Get-Git_RootFolder
    $file = "$folder\.gitmodules"
    $content = Invoke-Exe git config -f $file --list
    $configItemList = $content | Get-Like_Match 'submodule.*.*=*'
    $moduleList = $configItemList.1 | Select-Object -Unique
    foreach ($module in $moduleList) {
        $path   = Invoke-Exe git config -f $file "submodule.$module.Path"
        $url    = Invoke-Exe git config -f $file "submodule.$module.Url"
        $branch = Invoke-Exe git config -f $file "submodule.$module.Branch"
        Invoke-Exe git submodule add -b $branch -f --name $path $url $path
    }
}

function Sync-Git_Module_Branch {
    $folder = Get-Git_RootFolder
    $file = "$folder\.gitmodules"
    $content = Invoke-Exe git config -f $file --list
    $configItemList = $content | Get-Like_Match 'submodule.*.*=*'
    $moduleList = $configItemList.1 | Select-Object -Unique
    foreach ($module in $moduleList) {
        $path   = Invoke-Exe git config -f $file "submodule.$module.Path"
        $path   = "$folder/$path"
        $branch = Invoke-Exe git config -f $file "submodule.$module.Branch" -OkExitCode 0,1
        if ($branch) {
            Invoke-InLocation -path $path -script {
                Invoke-Exe git checkout $branch
            }
        }
    }
}