我有一个点文件存储库。我想将另一个具有子模块(prezto)的存储库合并到其中,这样我就可以方便地将所有内容保存在一个存储库中,而不会给子模块带来不便。
如何将prezto与其所有子模块合并到我的dotfiles存储库中?
我可以使用子模块,我可以用“老式”的方式或者用新的git子树工具拆分和合并子树。
我就是不知道该怎么办这个案子。

最佳答案

Alexander Mikhaiian创建了一个script来转换子树中的所有子模块,您应该能够使它适应您的情况。
在此介绍步骤:

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

我认为对您来说,最简单的方法是在preztorepo上应用脚本,然后将repo设置为dotfilesrepository中的子树。
prezto存储库中执行脚本后,将使用以下steps创建子树:
将指向preztorepo的新远程URL添加到dotfiles中。
git remote add -f prezto [email protected]: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"

08-27 04:48