【问题标题】:git add submodule hash directlygit 直接添加子模块哈希
【发布时间】:2015-08-16 10:50:10
【问题描述】:

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

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

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

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

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

【问题讨论】:

  • 我不认为(cd submodule/path; git checkout <commitid>); git commit -m 'updated submodule' submodule/path 太长了。那是两个 git 命令和一个 cd
  • @larsks,你错过了几个必要的命令。我已经更新了这个问题,以说明更多对替代命令的渴望。

标签: git git-submodules git-add


【解决方案1】:

从几个地方收集有用的信息块,这使我找到了一个简单的单行解决方案,可以完全满足问题的要求:

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

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

【讨论】:

  • update-index 也将从标准输入中读取,因此您也可以在一次调用中执行多个子模块。
猜你喜欢
  • 1970-01-01
  • 2020-03-31
  • 2021-03-04
  • 2015-03-22
  • 2020-12-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多