git - 将带有子模块的项目的历史记录复制到现有的单个项目
我有一个 git 项目包含 10 个子模块项目。我将此项目作为单个项目迁移到另一个项目。 (现在所有子模块都只是新项目中的一个文件夹)
有没有办法将子模块中文件的历史数据迁移到新项目中?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
我有一个 git 项目包含 10 个子模块项目。我将此项目作为单个项目迁移到另一个项目。 (现在所有子模块都只是新项目中的一个文件夹)
有没有办法将子模块中文件的历史数据迁移到新项目中?
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(1)
对于每个子模块,您需要将其历史记录导入到主 Git 项目存储库中。
您在 2013 年文章“将子模块集成到父模块中”中有一个示例来自 Lucas Jenß 的存储库”。
我们的想法是在主父存储库旁边克隆子模块存储库:
删除父存储库中的子模块声明:
重写 < code>sub/ 存储库历史记录,以便将每个元素移动到正确的路径(父存储库中作为子模块的
path/to/submodule
路径)但是,Lucas 正在使用一个(现在2022)旧的过时的 git filter-branch 命令,以便将每个子模块元素移动到父存储库中所需的路径:
它是有效的(但很麻烦,并且不能万无一失地应对极端情况,就像空提交)在 2013 年。
如今(2022 年),它是通过
git filter-repo
(在 安装,因为它是基于 python 的)最后,将
子
历史记录合并到父历史记录中:对所有 10 个子模块重复此操作。
您将获得一个单独的 Git 项目,其中保留了每个子模块的历史记录。
For each submodule, you would need to import their history into the main Git project repository.
You have an example in the 2013 article "Integrating a submodule into the parent repository" from Lucas Jenß.
The idea is to clone the submodule repository beside the main parent one:
Remove the submodule declaration in the parent repo:
Rewrite the
sub/
repository history in order to move each element to the right path (thepath/to/submodule
one it was in the parent repository as a submodule)However, Lucas is using a (now 2022) old obsolete
git filter-branch
command in order to move each submodule element to the path it needs to have in the parent repository:It was valid (but cumbersome and not fool-proofed against corner case, like empty commits) in 2013.
These days (2022), it is achieved with
git filter-repo
(after installation, as it is python-based)Finally, merge the
sub
history into the parent one:Repeat that for all 10 submodules.
And you get one single Git project, with each submodule history preserved.