如何通过子树合并将 git 存储库与子模块合并到另一个存储库中?
How to merge a git repository with submodules into another with subtree merge?
我有一个点文件存储库。我想将另一个带有子模块 (prezto) 的文件合并到其中,这样我就可以方便地将所有内容都放在一个存储库中,而不会带来子模块带来的不便。
如何将 prezto 及其所有子模块子树合并到我的 dotfiles 存储库中?
我可以使用子模块,我可以使用 "old fashioned" 方式或更新的 git 子树工具拆分和合并子树。
我只是不知道如何处理这个具体案例。
Alexander Mikhailian 创建了一个 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
我认为对您来说最简单的方法是在 prezto
存储库上应用脚本,然后使该存储库成为 dotfiles
存储库中的子树。
在 prezto
存储库中执行脚本后,您将使用以下 steps 创建子树:
将指向 prezto
存储库的新远程 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"
我有一个点文件存储库。我想将另一个带有子模块 (prezto) 的文件合并到其中,这样我就可以方便地将所有内容都放在一个存储库中,而不会带来子模块带来的不便。
如何将 prezto 及其所有子模块子树合并到我的 dotfiles 存储库中?
我可以使用子模块,我可以使用 "old fashioned" 方式或更新的 git 子树工具拆分和合并子树。
我只是不知道如何处理这个具体案例。
Alexander Mikhailian 创建了一个 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
我认为对您来说最简单的方法是在 prezto
存储库上应用脚本,然后使该存储库成为 dotfiles
存储库中的子树。
在 prezto
存储库中执行脚本后,您将使用以下 steps 创建子树:
将指向
prezto
存储库的新远程 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"