2012-05-15 69 views
2

我有一個大的目錄~/.vim,在其中我有一個其他許多git回購的子目錄。我想要製作我的~/.vim目錄的git回購,但不想通過我的其他每個git子目錄。自動將所有子模塊添加到回購

有什麼辦法只是遞歸地通過並添加所有子模塊?

+1

你想使你的.vim文件夾中的混帳回購協議並添加所有子目錄(這是git回購)作爲子模塊?是對的嗎 ? –

+0

是的,我有'〜/ .vim /捆綁/ matchit'例如從github直接克隆 – mazlix

回答

3

假設是vim的是已經一個有效的git回購和你想將所有的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

以下是對我有用: ''我在$(ls -d bundle/*); do; if [-d「$ i」/。git];然後; git submodule add $(cd $ i && git remote show origin | grep Fetch | awk'{print $ 3}')./$i;網絡連接;完成' – NeonNinja

0

我已經嵌套在更深的子目錄git的回購,所以要找到和深度的任何級別添加它們,我不得不使用: for i in $(find ~/Sources/* -type d -name .git) do cd $i && cd .. && git submodule add $(pwd) done

+0

我懷疑這是否有用。這會將子模塊添加爲遠程的本地路徑,但會使用http或ssh URI。 – 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