如何使用'git filter-branch'更新子模块的SHA?

Wal*_*t D 5 git git-submodules git-filter-branch

假设我有两个Git存储库,A和B. B是A的子模块.

为了简单起见,我们还假设我有一个神奇的函数get_sha_B,给定来自A的SHA提交,返回B的所需SHA提交.

如何在repo A上运行filter-branch,以便重新编写repo A的每个提交以指向所需的repo B提交,如get_sha_B

谢谢!

Wal*_*t D 5

弄清楚了!我将在这里回答我自己的问题:

我可以git update-index结合使用git filter-branch --index-filter.

以下是如何调用 update-index 来修改子模块的提交 SHA:

git update-index --cacheinfo 160000 88e6a302c42840440f9faac73f27efc6a3e0c1a6 pathto/mysubmodule
Run Code Online (Sandbox Code Playgroud)

据我所知,160000 是 Git 中用于标识子模块的幻数。