git 直接添加子模块哈希

git add submodule hash directly

有没有办法使用git命令直接更新索引中的子模块散列?

如果没有,有没有办法通过修改 .git 目录中某处的文本来手动更改它?

我想指向子模块中的特定提交,但我想避免必须进入该子模块、检查提交、将子模块添加到索引,然后检查原始提交子模块。 例如:

  1. cd <submod>
  2. git checkout <hash>
  3. cd ..
  4. git add <submod>
  5. cd <submod>
  6. git checkout <originalbranch>
    • 以编程方式确定 <originalbranch> 可能需要更多命令。

当然,这一切都可以编写脚本,但是由于子模块状态是通过单个散列在索引中捕获的,因此应该可以使用一个命令来执行此操作,而无需进行不必要的长时间实际检查提交。

从几个地方收集有用的信息,这让我找到了一个简单的单行解决方案,它完全符合问题的要求:

git update-index --cacheinfo 160000 <hash> <submod>

注意 160000 是子模块 gitlinks 的 mode。不确定是否需要包含它,但我已经确认它有效。