子模块的一个常见错误是在超级项目中提交一个子项目哈希,该哈希指向使用超级项目的每个人都无法访问的提交(例如,提交可能只存在于某人的个人机器上。)
我想审核整个历史记录,以确保超级项目曾经引用的每个子项目提交实际上都存在于给定的远程存储库中。有什么好的方法吗?
你可以试试这个GitHub 项目git-pre-push-submodule-check
(来自Konrad Malawski aka ktoso),它会进行检查(ruby 脚本):
从现在开始,您可能想使用 pom 而不是其他推送方法,它的外观如下:
当您在子模块中有未推送的更改时:
$ git pom
Checking [styles-common] submodule for unpushed commits...
**********************************************************
You have 2 unpushed commits within styles-common:
1a87491 added more fluffy icons
bd40c09 flash now has nice round corners
**********************************************************
Aborting push.
当您在子模块中没有未推送的更改时:
$ ./check_submodule_pushed.rb
Checking [styles-common] submodule for unpushed commits...
Seems all submodule commits you refer to are reachable, let's push!
但我的观点是:我不知道在推送其父仓库之前检查子模块是否已推送的本地方法。