在子文件夹中添加递归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
答案 0 :(得分:0)
我已经在目标文件夹中拥有文件夹结构和克隆的存储库。
我认为这会有问题,但git submodule add
man page确实提到了:
<path>
是克隆子模块在超级项目中存在的相对位置。
- 如果
<path>
不存在,则通过从指定的URL克隆来创建子模块。- 如果
<path>
确实存在并且已经是有效的Git存储库,则会将其添加到变更集而不进行克隆。
所以你需要做的就是:
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
不再推送/弹出。