私は大きなディレクトリ~/.vim
を持っていて、その中に他の多くのgitリポジトリを含むサブディレクトリがあります。ディレクトリのgitリポジトリを作成したいの~/.vim
ですが、他の各gitサブディレクトリを調べたくありません。
すべてのサブモジュールを再帰的に調べて追加する方法はありますか?
私は大きなディレクトリ~/.vim
を持っていて、その中に他の多くのgitリポジトリを含むサブディレクトリがあります。ディレクトリのgitリポジトリを作成したいの~/.vim
ですが、他の各gitサブディレクトリを調べたくありません。
すべてのサブモジュールを再帰的に調べて追加する方法はありますか?
.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
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
gitリポジトリをより深いサブディレクトリにネストしていたので、任意のレベルの深さからそれらを見つけて追加するには、次を使用する必要がありました。
for i in $(find ~/Sources/* -type d -name .git)
do
cd $i && cd .. && git submodule add $(pwd)
done
残念ながら、この機能は存在しないようです。gitには、.gitmodulesで参照されているすべてのモジュールを追加できるコマンドが必要です。
### wishful thinking
git submodules init --all
git submodules add --all
:(