假设以下项目布局: -
mainrepo_git
|____ .git
|____ .gitmodules
|____ proj <------- directory containing the code files for mainrepo
|____ 3rdpartysourcecode <-- directory containing upstream open source code
| |____ .git
| |____ 3rdpartyfiles
|
|____ mainrepofilesanddirectories
mainrepo_git 包含我直接负责的源代码。我有读/写访问权限,可以直接推送到我管理的远程git存储库。
嵌套在 mainrepo_git 中的是一个名为 3rdpartysourcecode 的目录。这个 3rdpartysourcecode 目录实际上是另一个git repo(通常也称为“git submodule”),它指向由其他开发人员管理的开源第三方git存储库。我只有读取权限。没有写访问权。
有没有办法'冻结'git子模块的特定提交哈希与我的主存储库中的提交相关?
例如,如果我(或我恢复)在我的mainrepo中提交 a12ucak ,我的git子模块也会被恢复为特定版本,我将其绑定到提交 a12ucak ?当我切换到提交 b349jdsak 时,我的git子模块也会恢复到我与 b349jdsak 绑定的版本?
所以我的问题是:有一种方法可以在主仓库中的特定提交与git子模块中的相应提交之间创建链接吗?以这种方式,当我在主git repo中检出特定提交时,git子模块中的相应提交也将被结帐。
答案 0 :(得分:11)
冻结是子模块的重点。你应该真正阅读它的教程。简而言之,git add 3rdpartysourcecode
(重要的没有尾随斜杠!)后跟提交将当前检出的子模块提交锁定到超级模块提交。然后,您可以使用git submodule update
查看该修订版。