公共存储库中的私有文件夹(子模块)

问题描述 投票:0回答:4

我有一个公共存储库。在其中我想使用一个私有的子模块。如果我将此子模块包含到我的公共存储库中,每个人都能够看到该子模块的内容吗?

git github git-submodules
4个回答
36
投票

否:在公共存储库中包含子模块意味着将其 URL 记录在公共 .gitmodules 文件中。

通过存储库的递归克隆访问该 URL 处的存储库不会比单独访问该存储库更方便。

这就是为什么,例如,使用 submodules 与 GitHub Pages 是不可能的:

您只能将子模块与指向 public 存储库的 GitHub Pages 站点一起使用。
无法使用指向私有存储库的子模块,因为 Pages 服务器无法访问私有存储库


8
投票

如果您将带有子模块的分支推送到公共存储库,则意味着公众将能够看到子模块的 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 分支可以拥有一组不同的子模块的方式。

通过这种方法,您需要在分支上的工作方式上保持相当的纪律,以免您不小心将您的私有分支推向全世界。


1
投票

我只是证明添加私有仓库是可能的,并且@Vonc 评论是正确的。

重点是看到带有私有仓库 URL 的 .gitmodules 并不意味着能够访问所述私有仓库。

我还发现,如果它已经在索引中,我们需要

git rm -r --cached


0
投票

不。它将保持私密。

这是因为当您从父文件夹设置子模块时,您必须指定远程 github url 或本地路径。如果仅指定本地路径,则无法在 github 中访问该路径,因为其内容不会被拉取。仅当您将子文件夹作为公共 github 存储库并且指定在创建子模块时,它将是公共的。

© www.soinside.com 2019 - 2024. All rights reserved.