将私有存储库部分公开

Sof*_*mur 7 git github repository

我已经在Github上建立了一个项目(使用html + css + javascript),为期半年。它已经在一个私有存储库中,只有一个分支。

现在,我想将此存储库部分公开,例如

  1. 用户可以使用该issues功能提出问题或提出要求,我可以答复他们,我们可以进行讨论。

  2. 实际上,用户不需要查看代码。但是正如我们在Github上一样,我可能想将一小部分文件公开

  3. 我不想丢失提交历史记录。

谁能告诉我应该遵循的步骤(理想情况下是什么命令)?我是否必须重新组织我的文件夹,例如,创建一个公用文件夹和一个私有文件夹(但愿不是)?

Mar*_*ger 4

首先要了解的是GitHub权限模型。提交问题等需要对存储库进行某种程度的许可。阅读应该足够了。

但阅读也意味着“能够查看所有代码和历史记录”。甚至能够看到意味着能够复制和分叉,即使您控制可以写回存储库的内容。并且没有比“读取(所有代码)”更低的访问级别。

因此,如果您想保留自己的代码,那么在 github 之外创建某种项目页面,并利用那里的专用问题跟踪系统,可能对您想要做的事情更有意义。

如果您确实决定某些代码应该公开,那么您必须有两个存储库。包含公共代码的存储库可以设置为只读,或者读/写(如果这样可以更好地满足您对该代码子集的需求)。无论哪种方式,它都可以主持问题讨论等。

将代码子集拆分到公共存储库中并不是太难,但如果您希望公共存储库也具有完整的历史记录,那就更难了。您需要避免创建公共代码的两个不同的历史记录,因此您可能必须从私有存储库中删除公共代码。(它可以作为子模块重新引入 - 公共存储库的链接 - 但在最简单的情况下,这确实意味着您需要将公共代码组织在单个目录下。)

如果只需要公开当前版本,那就很简单了。您初始化新的存储库,将文件从一个存储库移动到另一个存储库,如果需要,可以创建子模块链接。

如果您想发布已发布文件的历史记录,那么您必须执行一些操作,例如git filter-branch从原始存储库(的克隆)创建公共存储库。确切的过程取决于确切的要求,但通常您可以使用 (a) asubdirectory-filter来仅发布一个目录的内容(到新存储库的根目录) - 但听起来您的代码没有安排来实现这一点简单的; 或 (b)index-filter删除您想要保密的文件(同时保留剩余文件的现有目录结构);(c) 一个tree-filter任意复杂的脚本,用于移动、删除或添加文件,将“原始存储库”版本转换为相应的“公共存储库”版本。

如果您确实分割了历史记录,您可能仍然希望将公共文件的历史记录保留在原始存储库中,因为链接存储库的历史相当困难。大多数情况下,这并不是一个巨大的实际限制,除非历史记录的规模相当大。