有没有办法在项目标签中包含特定版本的 Git 子模块?
Is there a way to include a particular version of a Git submodule in a project tag?
我有一个项目 SubProj,我想将其作为子模块包含在 MainProj 中。但是,我想确保我对 MainProj 所做的任何发布也包含特定版本的 SubProj 以确保满足所有依赖项。
换句话说,当我将 MainProj 的特定提交标记为新版本 V1.0 时,我还想包括例如SubProj V1.3,因此每当有人签出 MainProj 1.0 时,子模块将始终初始化为 V1.3,而不是 SubProj HEAD 中当时指向的任何提交。
这可能吗?
当然这可以做到,但这不能用一个命令完成-完成种解决方案。你将不得不
- 要么必须发布工作流供您的用户执行,
- 为您的用户发布一个别名,一旦添加到他们各自的存储库中,或者,
- 编写一个 git
post-checkout
挂钩,您的用户必须下载该挂钩并将其添加到他们的存储库中的 .git/hooks
目录中,以处理所有这些。
很遗憾,我现在想不出更简单的解决方案。
您只需更新 MainProj#V1.0 以使用 SubProj#V1.3 的 SHA
Git 子模块的理念是针对主存储库的任何状态存储子模块的特定提交 SHA 值。话虽如此,以下命令应该可以做到:
让我们转到 MainProj 的 V1.0 分支:
$ cd main-repo-directory
$ git checkout V1.0
让我们找到V1.3对应的SubProj commit 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,那么在子模块的 init/update 上,它将到达 SubProj#V1.3,而不是子模块或 SubProj 的最新状态。
我有一个项目 SubProj,我想将其作为子模块包含在 MainProj 中。但是,我想确保我对 MainProj 所做的任何发布也包含特定版本的 SubProj 以确保满足所有依赖项。
换句话说,当我将 MainProj 的特定提交标记为新版本 V1.0 时,我还想包括例如SubProj V1.3,因此每当有人签出 MainProj 1.0 时,子模块将始终初始化为 V1.3,而不是 SubProj HEAD 中当时指向的任何提交。
这可能吗?
当然这可以做到,但这不能用一个命令完成-完成种解决方案。你将不得不
- 要么必须发布工作流供您的用户执行,
- 为您的用户发布一个别名,一旦添加到他们各自的存储库中,或者,
- 编写一个 git
post-checkout
挂钩,您的用户必须下载该挂钩并将其添加到他们的存储库中的.git/hooks
目录中,以处理所有这些。
很遗憾,我现在想不出更简单的解决方案。
您只需更新 MainProj#V1.0 以使用 SubProj#V1.3 的 SHA
Git 子模块的理念是针对主存储库的任何状态存储子模块的特定提交 SHA 值。话虽如此,以下命令应该可以做到:
让我们转到 MainProj 的 V1.0 分支:
$ cd main-repo-directory
$ git checkout V1.0
让我们找到V1.3对应的SubProj commit 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,那么在子模块的 init/update 上,它将到达 SubProj#V1.3,而不是子模块或 SubProj 的最新状态。