git filter-branch如何影响用作子模块的存储库?

问题描述 投票:0回答:1

我想使用git filter-branch从名为problems的存储库的提交历史记录中删除一些大文件。这会在使用thesis存储库作为子模块的存储库problems中引起任何问题吗?

即,git filter-branch所需的强制推动是否需要在thesis存储库中进行任何特殊操作或考虑?

git git-submodules git-filter-branch
1个回答
0
投票

简短的答案是“是”。过滤分支通过copying提交工作到具有不同哈希ID的新改进的提交。

如果复制的存储库用作子模块,则超级项目存储库包含提交,这些提交存储子模块的提交的原始哈希ID。由于新改进的提交具有different哈希ID,因此,超级项目现在至少保留旧的(即错误的)哈希ID,至少对于这样复制和替换的任何提交。

这意味着您现在必须替换超级项目in中所有提交,这些提交具有gitlink作为其gitlink,该提交的哈希ID已由子模块存储库中的新改进的提交替换。这样做是不平凡的。

使用--state-branch选项,可以告诉filter-branch命令保持旧哈希ID到新哈希ID的映射。 (此选项是Git 2.15.0中的新增功能。)您将需要此状态映射。在超项目上运行筛选器分支时,尚不清楚要使用临时的how来使用它,但是您将需要一个筛选器来查找包含具有旧提交条目的gitlink的提交,并告诉超项目筛选器进行替换具有更新的gitlinks的人。

© www.soinside.com 2019 - 2024. All rights reserved.