Git将嵌套的git repos视为常规文件/文件夹

我有一个像这样组织的顶级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

(首先在你的回购副本上测试)

点赞