git筛选器分支如何影响用作子模块的回购协议?

git筛选器分支如何影响用作子模块的回购协议?,git,git-submodules,git-filter-branch,Git,Git Submodules,Git Filter Branch,我想使用git filter branch从名为problems的存储库的提交历史中删除一些大文件。这是否会导致我的存储库论文(使用问题存储库作为子模块)中出现任何问题 也就是说,git filter branch所需的强制推送是否需要在论文库中进行任何特殊操作或考虑?简短的回答是“是”。筛选器分支通过将提交复制到具有不同哈希ID的新提交和改进提交来工作 如果复制的存储库用作子模块,超级项目存储库将包含保存子模块提交的原始哈希ID的提交。由于新的和改进的提交具有不同的散列ID,超级项目现在保存旧

我想使用
git filter branch
从名为
problems
的存储库的提交历史中删除一些大文件。这是否会导致我的存储库
论文
(使用
问题
存储库作为子模块)中出现任何问题

也就是说,
git filter branch所需的强制推送是否需要在
论文库中进行任何特殊操作或考虑?

简短的回答是“是”。筛选器分支通过将提交复制到具有不同哈希ID的新提交和改进提交来工作

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

这意味着您现在必须替换超级项目中的任何提交,这些提交的gitlink是提交的hash ID,该提交被子模块存储库中新的和改进的提交所替换。这样做是不平凡的

可以告诉filter branch命令使用
--state branch
选项保持从旧散列ID到新散列ID的映射。(这个选项在Git2.15.0中是新的。)您需要这个状态映射。在超级项目上运行筛选器分支时,目前还不清楚如何使用它,但您需要一个筛选器来查找包含具有旧提交条目的GitLink的提交,并告诉超级项目筛选器使用更新的GitLink替换这些提交。

简短的回答是“是”。筛选器分支通过将提交复制到具有不同哈希ID的新提交和改进提交来工作

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

这意味着您现在必须替换超级项目中的任何提交,这些提交的gitlink是提交的hash ID,该提交被子模块存储库中新的和改进的提交所替换。这样做是不平凡的

可以告诉filter branch命令使用
--state branch
选项保持从旧散列ID到新散列ID的映射。(这个选项在Git2.15.0中是新的。)您需要这个状态映射。在超级项目上运行筛选器分支时,目前还不清楚如何使用它,但您需要一个筛选器来查找包含具有旧提交条目的GitLink的提交,并告诉超级项目筛选器使用更新的GitLink替换这些提交