【发布时间】:2016-10-04 21:59:41
【问题描述】:
我有一个公共存储库。在其中我想使用一个私有的子模块。如果我将此子模块包含在我的公共 repo 中,每个人都可以看到该子模块的内容吗?
【问题讨论】:
标签: git github git-submodules
我有一个公共存储库。在其中我想使用一个私有的子模块。如果我将此子模块包含在我的公共 repo 中,每个人都可以看到该子模块的内容吗?
【问题讨论】:
标签: git github git-submodules
否:在公共存储库中包含子模块意味着将其 URL 记录在公共 .gitmodules 文件中。
通过递归克隆您的存储库将无法访问该 URL 处的存储库,而不是单独访问该存储库。
这就是为什么不能使用submodules with GitHub Pages 的原因:
您只能将子模块用于指向公共存储库的 GitHub Pages 站点。
无法使用指向私有存储库的子模块,因为 Pages 服务器无法访问私有存储库存储库。
【讨论】:
.gitmodules。
如果您将带有子模块的分支推送到公共存储库,则意味着公众将能够看到子模块的 URL。公众能否看到子模块的内容取决于你是否让公众可以访问它。例如,如果您将其保存在私有 Github 存储库中,公众将能够看到该 URL,但无法访问其内容。
添加子模块实际上只是在.gitmodules 中的url 中添加一个条目,它不会粘贴到该存储库的内容中。该 URL 是否可公开访问完全是另一回事。
如果您甚至想将私有存储库的 URL 保持为私有,则必须在单独的本地分支上工作,并且永远不要将该分支推送到公共存储库。例如。
git clone somePublicRepo
cd somePublicRepo
git branch neverPushThisBranch
git checkout neverPushThisBranch
git submodule add privateRepo
git submodule update
由于描述存储库包含哪些子模块的文件 (.gitmodules) 就像 Git 中的任何其他文件一样签入,如果您签出分支上的子模块,除非您将分支推送到公共场所。
这就是不同的 git 分支可以有不同的子模块集的方式。
使用这种方法,您需要相当自律地处理分支的工作,以免您不小心将您的私有分支推向世界。
【讨论】: