5

私は大きなディレクトリ~/.vimを持っていて、その中に他の多くのgitリポジトリを含むサブディレクトリがあります。ディレクトリのgitリポジトリを作成したいの~/.vimですが、他の各gitサブディレクトリを調べたくありません。

すべてのサブモジュールを再帰的に調べて追加する方法はありますか?

4

4 に答える 4

13

.vimがすでに有効なgitリポジトリであり、すべてのgitリポジトリをメインのgitリポジトリに追加したい場合、以下のforループがおそらく必要なものです。

まず、gitリポジトリcdのルートに移動します。

貼り付け可能なプレビューコマンド-エコーのみ、変更は行われません:

for x in $(find . -type d) ; do if [ -d "${x}/.git" ] ; then cd "${x}" ; origin="$(git config --get remote.origin.url)" ; cd - 1>/dev/null; echo git submodule add "${origin}" "${x}" ; fi ; done

サブモジュールを追加するための貼り付け可能なコマンド:

for x in $(find . -type d) ; do if [ -d "${x}/.git" ] ; then cd "${x}" ; origin="$(git config --get remote.origin.url)" ; cd - 1>/dev/null; git submodule add "${origin}" "${x}" ; fi ; done

このループは、最初にディレクトリのみを検索し、.gitディレクトリを検索し、元のURLを識別してから、サブモジュールを追加します。

読み取り可能なバージョン:

for x in $(find . -type d) ; do
    if [ -d "${x}/.git" ] ; then
        cd "${x}"
        origin="$(git config --get remote.origin.url)"
        cd - 1>/dev/null
        git submodule add "${origin}" "${x}"
    fi
done
于 2012-05-15T19:07:13.430 に答える
1
cd /to/super/repo
root_path=$(pwd)
for submodule in $(find -mindepth 2 -type d -name .git); do
    submodule_dir=$root_path/$submodule/..
    remote_name=$(cd $submodule_dir && git rev-parse --abbrev-ref --symbolic-full-name @{u}|cut -d'/' -f1 )
    remote_uri=$(cd $submodule_dir && git remote get-url $remote_name)

    echo "Adding $submodule with remote $remote_name..."

    # If already added to index, but not to .gitmodules...
    git rm --cached $submodule_dir &> /dev/null

    git submodule add $remote_uri $submodule_dir
done
于 2017-12-14T23:56:49.443 に答える
0

gitリポジトリをより深いサブディレクトリにネストしていたので、任意のレベルの深さからそれらを見つけて追加するには、次を使用する必要がありました。 for i in $(find ~/Sources/* -type d -name .git) do cd $i && cd .. && git submodule add $(pwd) done

于 2016-03-25T23:55:15.213 に答える
0

残念ながら、この機能は存在しないようです。gitには、.gitmodulesで参照されているすべてのモジュールを追加できるコマンドが必要です。

### wishful thinking

git submodules init --all
git submodules add --all

:(

于 2021-10-05T23:50:09.257 に答える