我有一个像这样组织的顶级git repo:
> .git /
> repoA /
> .git /
>文件
> file2
>文件夹/
> ……
>文件
> file2
>文件夹/
> ……
如何让git添加并提交repoA(和repoA / .git),就像它们是常规文件/文件夹一样?
具体来说,我想绕过像子模块这样的文件夹的处理,但我想保留嵌套repo的分支/历史(因此需要.git文件夹).
我不想改变嵌套repo的状态(通过提交或合并历史记录)并且不想将它推送到远程的单独repo.
预期的结果与我以后的tar repoA相同,并在以后解压缩.也就是说,所有文件都是完整的,没有修改或git的特殊处理.
最佳答案 你可以看看
git subtree.
为此,如果您目前有子模块,可以按照“Convert a git repository from submodules to subtrees”:
cat .gitmodules |while read i
do
if [[ $i == \[submodule* ]]; then
mpath=$(echo $i | cut -d\" -f2)
read i; read i;
murl=$(echo $i|cut -d\ -f3)
mcommit=`eval "git submodule status ${mpath} |cut -d\ -f2"`
mname=$(basename $mpath)
echo -e "$name\t$mpath\t$murl\t$mcommit"
git submodule deinit $mpath
git rm -r --cached $mpath
rm -rf $mpath
git remote add $mname $murl
git fetch $mname
git branch _$mname $mcommit
git read-tree --prefix=$mpath/ -u _$mname
fi
done
git rm .gitmodules
(首先在你的回购副本上测试)