gpt4 book ai didi

git - 将 git 子模块转换为常规目录并保留主树中的历史记录?

转载 作者:行者123 更新时间:2023-12-04 12:25:51 54 4
gpt4 key购买 nike

我有一个由许多子模块组成的项目。然而,事后看来,这些子模块中的一些不应该是子模块,因为它们并不意味着或永远不会在另一个项目中使用,我偶尔会在它们之间传输代码。这个项目兼作子模块的实验,所以我对它有点疯狂。

我想知道是否有办法将子模块转换为常规目录,维护更改历史但重写主项目的历史,以便将它们视为常规目录。

我已经看到了关于子树 merge 的内容,但我希望有一种方法来重写提交,以便文件路径以子模块的路径为前缀。

最佳答案

使用 git subtree 很容易如果您只想保留每个子模块的单个分支的历史记录:

git fetch <path/to/submodule> HEAD
git rm <path/to/submodule>
git commit -m "Prepare to integrate Git submodules' history into repository"
git subtree add --prefix=<path/to/submodule> FETCH_HEAD

这将集成子模块当前 check out 修订的历史记录。确保之前处于清洁状态,从而运行例如 git submodule update并仔细检查 git status .

您将获得两次提交:第一次删除子模块,第二次将先前的历史记录(现在存储在 FETCH_HEAD 中)集成到存储库中。没有简单的方法(至少我不知道)通过“原子”提交来做到这一点。您需要摆弄 Git 的管道命令集才能这样做。

如果需要集成多个子模块的历史,我建议将所有移除操作放在第一次提交中,所有集成操作放在第二次提交中。在这种情况下,您需要通过其他方式记住获取的 HEADS。

笔记:
虽然 git subtree住在 ./contrib在上游 Git 中,它似乎(至少)自 v1.9.1(2014 年 3 月)以来在 Debian 上可用。

关于git - 将 git 子模块转换为常规目录并保留主树中的历史记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52224200/

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