如何将 git 子模块与特定哈希挂钩?

How can you peg a git submodule to a specific hash?

我有一个项目,里面有一个子模块。我希望能够使用 --recursive 克隆父项目,并在该子模块的特定哈希值处获取子模块。特定哈希不是任何分支的头部,它是特定提交。 从 svn 的角度将外部与特定修订挂钩。

我试图将子模块添加到一个分支并检查所需的散列,但是当我想提交更改时它保留了添加的初始散列。

基本上 Git 默认情况下,子模块与超级项目中的提交挂钩到特定哈希(即子模块的签出提交)(但是,子模块不会自动更新默认情况下,当您更改父存储库时 - 手动执行此操作 TortoiseGit 提供 "Submodule update" 功能,或者您可以配置 submodule.recurse).

如果您的 .gitmodules 文件只为特定子模块设置了 urlpath 值,那么如果"parent" 存储库。

当你比较包含子模块的提交时,你可以在日志对话框中验证这一点,然后你可以在那里看到子模块的哈希值。除非此提交在子模块中检出,否则它将在父存储库中报告为已修改。

为了将子模块更新到该特定版本(例如,在拉取或 switch/checkout 之后),您需要 运行 "Submodule update"(可能按顺序使用 force 选项强制子模块使用该修订版——这可能会导致子模块在本地丢失数据。

进一步阅读: