如何将带有子模块的git存储库合并到另一个带有子树合并的git存储库中?

如何将带有子模块的git存储库合并到另一个带有子树合并的git存储库中?,git,merge,git-submodules,git-subtree,pretzo,Git,Merge,Git Submodules,Git Subtree,Pretzo,我有一个dotfiles存储库。我想将另一个包含子模块()的存储库合并到其中,这样我就可以方便地将所有内容都放在一个存储库中,而不必担心子模块带来的不便 如何将prezto子树及其所有子模块合并到我的dotfiles存储库中 我可以使用子模块,我可以用“老式”的方式或者用更新的git子树工具拆分和合并子树 我只是不知道如何处理这个特定的案例。亚历山大·米哈利安创建了一个转换子树中所有子模块的方法,您应该能够根据您的案例进行调整 在此介绍以下步骤: cat .gitmodules |while r

我有一个dotfiles存储库。我想将另一个包含子模块()的存储库合并到其中,这样我就可以方便地将所有内容都放在一个存储库中,而不必担心子模块带来的不便

如何将prezto子树及其所有子模块合并到我的dotfiles存储库中

我可以使用子模块,我可以用“老式”的方式或者用更新的git子树工具拆分和合并子树


我只是不知道如何处理这个特定的案例。

亚历山大·米哈利安创建了一个转换子树中所有子模块的方法,您应该能够根据您的案例进行调整

在此介绍以下步骤:

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
我认为最简单的方法是在
prezto
repo上应用脚本,然后使repo成为
dotfiles
存储库中的子树

prezto
存储库中执行脚本后,您将使用以下方法创建子树:

  • 将指向
    prezto
    repo的新远程URL添加到
    dotfiles

    git remote add -f prezto user@example.com:path/prezto.git
    
  • prezto
    项目合并到本地
    dotfiles
    项目中。这不会在本地更改任何文件,但会为下一步准备Git

    git merge -s ours --no-commit prezto/master
    
  • 创建一个名为
    prezto subdir
    (或任何您喜欢的)的新目录,并将
    prezto
    项目的Git历史复制到其中

    git read-tree --prefix=prezto-subdir/ -u prezto/master
    
  • 提交更改以确保其安全

    git commit -m "Subtree merged in prezto"
    

  • 为什么不在dotfiles存储库中将每个子模块维护为子树呢?是的,这就是我想要做的。我想摆脱子模块,只维护一个存储库作为一个整体。