2012-05-15 3 views
2

У меня есть большой каталог ~/.vim и в нем у меня есть подкаталог со многими другими git-репозиториями в нем. Я хочу сделать git repo моего каталога ~/.vim, но не хочу проходить через каждый из моих других подкаталогов git.Автоматически добавлять все подмодули в репо

Есть ли способ просто рекурсивно проходить и добавлять все подмодули?

+1

Вы хотите сделать вашу .vim папки с GIT репозитория и добавить все ваши подкаталоги (которые являются git repos) в качестве подмодулей? Это правильно ? –

+0

Да, у меня есть '~/.vim/bundle/matchit', например, который клонирован прямо из github. – mazlix

ответ

3

Пусть что .vim уже действительный мерзавец репо и хочешь, чтобы добавить все GIT сделок РЕПО на ваш основной мерзавца репо, то цикл ниже, вероятно, что вам нужно:

for i in $(ls -d */); do; if [ -d "$i".git ]; then; git submodule add $i; fi; done 

В этом цикле сначала отображаются только списки каталогов, проверьте, являются ли они действительными .git repos и, наконец, добавляют их в качестве подмодуля. Ниже приводится более читаемая версия:

for i in $(ls -d */) 
do 
    if [ -d "$i".git ] 
    then 
     git submodule add $i 
    fi 
done 

Обратите внимание, что вы должны выполнить цикл в пачки папки. Поскольку тестовое предложение просто тестируется на один уровень каталога.

+2

Для меня работало следующее: ' for i in $ (ls -d bundle/*); do, если [-d "$ i" /. git]; тогда; git subodule add $ (cd $ i && git удаленное шоу начало | grep Fetch | awk '{print $ 3}') ./$i; Fi; done' – NeonNinja

0

Я Git репо, вложенный в более глубоких поддиректориях, так, чтобы найти и добавить их с любого уровня глубины, я должен был использовать: for i in $(find ~/Sources/* -type d -name .git) do cd $i && cd .. && git submodule add $(pwd) done

+0

Я сомневаюсь, что это делает что-то полезное. Это добавляет подмодули с локальным путем как удаленные, но с URI http или ssh. – lumbric

0
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 
Смежные вопросы