1. ホーム
  2. git

[解決済み] .gitmodulesからgitサブモジュールを復元する

2023-05-13 14:28:26

質問

gitレポのフォルダがあります。それはいくつかのファイルと.gitmodulesファイルを含んでいます。今、私がするとき git init と書いてから git submodule init を実行しても、後者のコマンドの出力は何もありません。どうすれば、.gitmodulesファイルで定義されたサブモジュールを、コマンドを実行せずにgitに表示させることができるのでしょうか? git submodule add を再び手で実行することなく、.gitmodulesファイルで定義されたサブモジュールを見ることができるようにするにはどうしたらよいでしょうか?

更新しました。 これは私の.gitmodulesファイルです。

[submodule "vim-pathogen"]
    path = vim-pathogen
    url = git://github.com/tpope/vim-pathogen.git
[submodule "bundle/python-mode"]
    path = bundle/python-mode
    url = git://github.com/klen/python-mode.git
[submodule "bundle/vim-fugitive"]
    path = bundle/vim-fugitive
    url = git://github.com/tpope/vim-fugitive.git
[submodule "bundle/ctrlp.vim"]
    path = bundle/ctrlp.vim
    url = git://github.com/kien/ctrlp.vim.git
[submodule "bundle/vim-tomorrow-theme"]
    path = bundle/vim-tomorrow-theme
    url = git://github.com/chriskempson/vim-tomorrow-theme.git

そして、このディレクトリのリストです。

drwxr-xr-x  4 evgeniuz 100 4096 июня  29 12:06 .
drwx------ 60 evgeniuz 100 4096 июня  29 11:43 ..
drwxr-xr-x  2 evgeniuz 100 4096 июня  29 10:03 autoload
drwxr-xr-x  7 evgeniuz 100 4096 июня  29 12:13 .git
-rw-r--r--  1 evgeniuz 100  542 июня  29 11:45 .gitmodules
-rw-r--r--  1 evgeniuz 100  243 июня  29 11:18 .vimrc

ということで、間違いなくトップレベルにあります。gitディレクトリは変更されず、単に git init が行われるだけです。

どのように解決するのですか?

git submodule init は、すでにインデックスにある (つまり "staged") サブモジュールだけを初期化のために考慮します。 を解析する短いスクリプトを書きます。 .gitmodules を解析し、それぞれの urlpath のペアが実行されます。

git submodule add <url> <path>

例えば、以下のようなスクリプトを使用することができます。

#!/bin/sh

set -e

git config -f .gitmodules --get-regexp '^submodule\..*\.path$' |
    while read path_key path
    do
        url_key=$(echo $path_key | sed 's/\.path/.url/')
        url=$(git config -f .gitmodules --get "$url_key")
        git submodule add $url $path
    done

これは git-submodule.sh スクリプト を解析し .gitmodules ファイルを解析します。