我有一个公共存储库。在其中我想使用私有的子模块。如果我将这个子模块包含在我的公共仓库中,那么每个人都能看到该子模块的内容吗?
答案 0 :(得分:10)
否:在公共存储库中包含子模块意味着将其URL记录在公共.gitmodules文件中。
该URL的存储库将不再通过存储库的递归克隆访问,而不是单独存储。
这就是为什么,例如,使用submodules with GitHub Pages是不可能的:
您只能使用指向 public 存储库的GitHub Pages网站的子模块。
使用指向私有存储库的子模块是不可能的,因为Pages服务器无法访问私有存储库。
答案 1 :(得分:2)
如果将带有子模块的分支推送到公共存储库,则意味着公共将能够看到子模块的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分支可以拥有一组不同的子模块。
通过这种方法,您需要对您在分支机构的工作方式保持相当的纪律,以免您意外地将您的私人分支推向世界。