Restore git submodules from .gitmodules

前端 未结 7 593
粉色の甜心
粉色の甜心 2020-12-02 04:47

I have a folder, which was a git repo. It contains some files and .gitmodules file. Now, when I do git init and then git submodule init, the latter

7条回答
  •  死守一世寂寞
    2020-12-02 05:29

    I know its been a while, but I want to share this version that calls git config only once, doesn't requires a script and also handles branches:

    git config -f .gitmodules --get-regexp '^submodule\.' | perl -lane'
    $conf{$F[0]} = $F[1]}{
    @mods = map {s,\.path$,,; $_} grep {/\.path$/} keys(%conf);
    sub expand{$i = shift; map {$conf{$i . $_}} qw(.path .url .branch)}
    for $i (@mods){
        ($path, $url, $branch) = expand($i);
        print(qq{rm -rf $path});
        print(qq{git submodule add -b $branch $url $path});
    }
    '
    

    The only side effect is the output of the commands, nothing gets executed, so you can audit before committing to them.

    This works with a simple copy and paste at the console, but should be trivial to put in a shell script.

    example output:

    rm -rf third-party/dht
    git submodule add -b post-0.25-transmission https://github.com/transmission/dht third-party/dht
    rm -rf third-party/libutp
    git submodule add -b post-3.3-transmission https://github.com/transmission/libutp third-party/libutp
    rm -rf third-party/libb64
    git submodule add -b post-1.2.1-transmission https://github.com/transmission/libb64 third-party/libb64
    rm -rf third-party/libnatpmp
    git submodule add -b post-20151025-transmission https://github.com/transmission/libnatpmp third-party/libnatpmp
    rm -rf third-party/miniupnpc
    git submodule add -b post-2.0.20170509-transmission https://github.com/transmission/miniupnpc third-party/miniupnpc
    rm -rf third-party/libevent
    git submodule add -b post-2.0.22-transmission https://github.com/transmission/libevent third-party/libevent
    

提交回复
热议问题