我在GitHub上用html + css + javascript
搭建了半年的项目。一直在私有(private)仓库,只有一个分支。
现在我想让这个存储库部分公开,这样:
用户可以使用
issues
功能提出问题或写需求,我可以回复他们,我们可以讨论。实际上,用户不需要看到代码。但由于我们在 GitHub 上,我可能想公开一小部分文件。
我不想丢失提交历史。
谁能告诉我应该遵循哪些步骤(最好是命令)?
我是否必须重新组织我的文件夹,例如,制作一个公共(public)文件夹和一个私有(private)文件夹?
最佳答案
首先要了解的是GitHub权限模型。提交问题等需要对 repo 的某种级别的许可。阅读应该足够了。
但阅读确实也意味着“能够看到所有代码和历史”。能够看到甚至意味着能够复制和 fork ,即使您控制可以写回您的存储库的内容。并且没有低于“读取(所有代码)”的访问级别。
因此,如果您想将自己的代码保密,那么在 github 之外创建某种项目页面,并利用那里的专用问题跟踪系统,可能对您尝试做的事情更有意义。
如果您确实决定某些 代码应该公开,那么您必须有两个存储库。带有公共(public)代码的 repo 可以设为只读,或者如果能更好地满足您对该代码子集的需求,则可以设为读/写。无论哪种方式,它都可以主持问题讨论等。
将代码子集拆分到公共(public)存储库中并不太,但如果您希望公共(public)存储库也具有完整的历史记录,那就更难了。您将希望避免创建两个不同的公共(public)代码历史记录,因此您可能必须从私有(private)存储库中删除公共(public)代码。 (它可以作为一个子模块重新引入 - 一个指向公共(public)存储库的链接 - 但在最简单的情况下,这意味着您需要将公共(public)代码组织在一个目录下。)
如果只需要公开当前版本,那就很简单了。您初始化新的存储库,将文件从一个移到另一个,如果需要,创建子模块链接。
如果您想发布已发布文件的历史记录,那么您必须执行类似 git filter-branch
的操作,以从原始存储库(的克隆)创建公共(public)存储库。确切的过程取决于具体的要求,但通常您可以使用 (a) subdirectory-filter
来仅发布一个目录的内容(到新 repo 的根目录)——但听起来就像您的代码没有安排得那么容易;或 (b) index-filter
删除您想要保密的文件(同时为剩余文件保留现有目录结构);或 (c) tree-filter
和一个你喜欢移动、删除或添加文件的复杂脚本,将“原始 repo ”版本转换为相应的“公共(public) repo ”版本。
如果您确实拆分了历史记录,您可能仍希望将公共(public)文件的历史记录保留在原始存储库中,因为链接存储库的历史记录相当困难。在大多数情况下,这并不是一个很大的实际限制,除非历史的规模相当可观。
关于GitHub:将私有(private)存储库部分公开,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44261626/