gpt4 book ai didi

Git 将子模块干净地 merge 到父树中并保留提交历史记录

转载 作者:IT王子 更新时间:2023-10-29 00:36:08 24 4
gpt4 key购买 nike

我有一个包含两个子模块的存储库,我想将它们转换为一个项目。许多答案都涉及脚本,有些似乎过于复杂。

[submodule "site"]
path = wp-content/themes/site
url = https://ajf-@bitbucket.org/ajf-/site.git
fetchRecurseSubmodules = true
ignore = all
[submodule "wpsite"]
path = wp-content/themes/wpsite
url = https://ajf-@bitbucket.org/ajf-/wpsite.git
fetchRecurseSubmodules = true
ignore = all

是否有官方支持/记录的方式将这些子模块 merge 到父存储库中?

最佳答案

最好的方法是进行子树 merge

首先,从你的 super 项目中移除子模块和相关配置;编辑您的 .gitmodules 文件以删除受影响的子模块,或者如果您打算 merge 所有子模块,则完全删除该文件。也删除子模块目录。

接下来,将子模块存储库作为适当的 Remote 添加到您的 super 项目中:

git remote add site https://ajf-@bitbucket.org/ajf-/site.git
git remote add wpsite https://ajf-@bitbucket.org/ajf-/wpsite.git

然后,获取 Remote :

git fetch --all

现在,从每个子项目中检查要嫁接到主项目的分支:

git checkout -b site-branch site/some_branch
git checkout -b wpsite-branch wpsite/some_other_branch

之后,回到master分支,或者回到你想创建组合 super 工程的分支:

git checkout master

如果您想为操作创建一个(可能是临时的)额外分支,请改为执行以下操作:

git checkout -b new-superproject master

您现在已准备好将模块分支作为子树 与您的主项目 merge (在此示例中为master 分支):

git read-tree --prefix=site/ -u site-branch
git read-tree --prefix=wpsite/ -u wpsite-branch

你就完成了。使用 gitk --all 检查结果。

由于您想转换为单个项目,因此您不会独立更新子项目,所以我不打算描述它是如何工作的。

您可以在 chapter on subtree merging from Pro Git 中阅读相关内容

关于Git 将子模块干净地 merge 到父树中并保留提交历史记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23327701/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com