我有一个项目SubProj,我希望将其作为MainProj中的子模块包含在内。但是,我想确保我对MainProj的任何版本都包含特定版本的SubProj,以确保满足所有依赖项。
换句话说,当我将MainProj的特定提交标记为新版本V1.0时,我还想包括例如SubProj V1.3,这样每当有人检出MainProj 1.0时,子模块将始终初始化为V1.3,而不是当时HEAD指向的SubProj中的任何提交。
这可能吗?
答案 0 :(得分:1)
您只需要更新MainProj#V1.0以使用SubProj的SHA#V1.3
Git子模块的原理是将子模块的特定提交SHA值存储在主存储库的任何状态中。说过以下命令应该是必要的:
让我们去一个分支说MainProj的V1.0:
$ cd main-repo-directory
$ git checkout V1.0
让我们找到对应于V1.3的SubProj提交ID
$ cd <sub-module-directory>
$ git log # Pick the commit SHA id corresponding to V1.3, say <sub-prev-commit-sha>
$ git reset --hard <sub-prev-commit-sha>
现在,只需更新MainProj#V1.0即可参考SubProj#V1.3
$ cd main-repo-directory
$ git add <sub-module-directory>
$ git commit -m 'Tagging SubProj#V1.3 to MainProj#V1.0'
$ git push
现在,如果有人检查出MainProj#V1.0,那么在子模块的初始化/更新时,它将转到SubProj#V1.3,而不是子模块或SubProj的最新状态。
答案 1 :(得分:0)
当然可以做到这一点,但是使用 one命令完成类型的解决方案无法做到这一点。你必须
post-checkout
钩子,您的用户必须将其下载并添加到其存储库中的.git/hooks
目录中,以处理所有这些。不幸的是,我现在想不出任何更简单的解决方案。