在子文件夹中添加递归git repos作为子模块

时间:2017-04-05 04:22:19

标签: git github git-submodules

在子文件夹中添加递归git repos作为子模块:

我正在寻找一个解决方案,将git存储库作为子模块添加到一个git repo文件夹中。

我已经在目标文件夹中拥有文件夹结构和克隆的存储库。我只需要自动将子文件夹中的那些repos添加为子模块。

有数百个git repos所以我想自动化它。

结构:文件夹1& 2作为类别。

~/gitrepo-main/folder1/folder01/submodule
~/gitrepo-main/folder1/folder02/submodule
~/gitrepo-main/folder2/folder01/submodule
~/gitrepo-main/folder2/folder02/submodule

编辑:

可能通过Convert git repo to submodule

找到了解决方案

脚本从gitrepo-main文件夹

运行
#!/bin/bash
for d in `find folder1/ -maxdepth 3 -mindepth 3 -type d`
do
    pushd $d
    export url=$(git config --get remote.origin.url)
    popd
    git submodule add $url $d
done

1 个答案:

答案 0 :(得分:0)

  

我已经在目标文件夹中拥有文件夹结构和克隆的存储库。

我认为这会有问题,但git submodule add man page确实提到了:

  

<path>是克隆子模块在超级项目中存在的相对位置。

     
      
  • 如果<path>不存在,则通过从指定的URL克隆来创建子模块。
  •   
  • 如果<path>确实存在并且已经是有效的Git存储库,则会将其添加到变更集而不进行克隆。
  •   

所以你需要做的就是:

  • find all gitlinks(如果这些嵌套的repos已经添加到父目录,并在其根目录下完成git add .
  • 或通过查找父回购中的任何.git子文件夹来查找所有嵌套回购。
  • 查询远程子报表网址(每个文件夹中的git remote -v) 请注意,这些子文件夹中没有“cd”,您可以执行以下操作:

    git -C /full/path/of/subrepo remote -v
    
  • 将该路径声明为子模块

    git submodule add -- /remote/url/of/subrepo relative/path/of/subrepo
    

OP提到“Convert git repo to submodule”。使用-C语法,这将给出:

for d in `find .vim/bundle/ -maxdepth 1 -mindepth 1 -type d`
do
    export url=$(git -C $d config --get remote.origin.url)
    git submodule add $url $d
done

不再推送/弹出。