公共仓库中的私人文件夹(子模块)

Noi*_*art 12 git github git-submodules

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

Von*_*onC 10

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

该URL的存储库将不再通过存储库的递归克隆访问,而不是单独存储.

这就是为什么,例如,使用带有GitHub页面的子模块是不可能的:

您只能使用指向公共存储库的GitHub Pages站点的子模块.
使用指向私有存储库的子模块是不可能的,因为Pages服务器无法访问私有存储库.

  • @Noitidart他的答案是不正确的。您可以在公共分支/存储库中发布“.gitmodules”。 (2认同)
  • 要点是:看到带有私有存储库 URL 的 .gitmodules 并不意味着能够访问所述私有存储库。 (2认同)

Mic*_*elM 7

如果您将带有子模块的分支推送到公共存储库,则意味着公众将能够看到子模块的 URL。公众是否可以看到子模块的内容取决于您是否可以让公众访问它。例如,如果您将其存储在私有 Github 存储库中,则公众将能够看到该 URL,但无法访问其内容。

添加子模块实际上所做的只是将一个条目放入 url 中.gitmodules,它不会粘贴到该存储库的内容中。该 URL 是否可公开访问完全是另一回事。

如果您甚至想将私有存储库的 URL 保留为私有,则必须在单独的本地分支上工作,并且永远不要将该分支推送到公共存储库。例如。

git clone somePublicRepo
cd somePublicRepo
git branch neverPushThisBranch
git checkout neverPushThisBranch
git submodule add privateRepo
git submodule update
Run Code Online (Sandbox Code Playgroud)

由于描述存储库包含哪些子模块的文件 ( .gitmodules) 的签入就像 Git 中的任何其他文件一样,因此如果您签出分支上的子模块,则除非您将分支推送到公共位置,否则没有人会看到该子模块。

这就是不同的 git 分支可以拥有一组不同的子模块的方式。

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