【发布时间】:2022-10-06 08:15:06
【问题描述】:
所以我使用 git subtree 策略将存储库分支合并到另一个作为子目录。
首先我使用git subtree add -P some/dir1 myremote dev。
然后我将子树目录重命名为some/dir2。那是一个错误,因为重命名似乎打破了git对子树集成的认识,现在我不能使用git subtree命令来合并远程更改,其他与子树相关的操作不会考虑重命名之前的提交。
newrepo 分支:
(create subtree some/dir1 from remote/C0) - C1 - (rename some/dir1 some/dir2) - C2 - HEAD
这里 C1 和 C2 代表许多提交。
创建子树的oldrepo:
C0 -- C1 - HEAD
来自oldrepo 的远程分支包含自最初并入newrepo 以来的许多提交。
如果这些是同一存储库中的分支:
(oldrepo) C0 - C1 ------------------------------------ HEAD
(newrepo) \\
D0 - D1 - (rename some/dir1 some/dir2) - D2 - HEAD
(这里 D0 是初始 git subtree add 操作生成的提交,因此它对应于 C0。如果这是同一个 repo 中的分支,则 C0 和 D0 将是相同的提交。)
现在,git subtree pull -P some/dir2 oldrepo dev 因不相关的历史而失败。
考虑到自初始合并以来的所有提交,包括重命名之前和之后的所有提交,是否有某种方法可以将 oldrepo 的更改合并到 newrepo 子树中?
基本上,有没有办法告诉 git D0 是来自oldrepo 的提交的共同祖先,并且子树目录的重命名不会影响来自 oldrepo 的提交?
谢谢!
-
自从我更换雇主以来,我没有携带代码,但我记得手动编辑保存子树信息以及文件夹更改的文件。当您最初重命名时,这可能会防止出现问题。也许它可以帮助修补它?
-
你知道那是什么文件吗?
-
如果您以与最初相同的方式运行
git subtree,在同一个原始存储库上,它应该生成相同系列的提交,以便任何新提交都应添加为相关历史记录。虽然已经有关于 git subtree 中的错误的报告,而且它的维护很差。 -
@CharlesLanglois 不幸的是,没有,但您可以尝试使用文件夹名称或远程地址的 grep,您应该会找到它。好机会!
标签: git git-subtree