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

时间:2016-06-05 03:02:36

标签: git github git-submodules

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

2 个答案:

答案 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分支可以拥有一组不同的子模块。

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

相关问题