我有一个大目录~/.vim
,其中有一个子目录,其中包含许多其他git repos。我想制作一个我的~/.vim
目录的git repo,但是不想浏览我的其他git子目录。
有没有办法只递归通过并添加所有子模块?
答案 0 :(得分:6)
假设 .vim已经一个有效的git repo 并且你想将所有git repos添加到你的主git repo中,那么下面的for循环可能是你的需要:
首先,cd
到你的 git存储库的根目录。
仅限粘贴预览命令 - 回显,不会进行任何更改:
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
答案 1 :(得分: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
答案 2 :(得分:0)
我有git repos嵌套在更深的子目录中,所以要从任何深度级别查找和添加它们,我必须使用:
for i in $(find ~/Sources/* -type d -name .git)
do
cd $i && cd .. && git submodule add $(pwd)
done