GitHub:将私有(private)存储库部分公开

标签 git github repository

我在GitHub上用html + css + javascript搭建了半年的项目。一直在私有(private)仓库,只有一个分支。

现在我想让这个存储库部分公开,这样:

  1. 用户可以使用issues功能提出问题或写需求,我可以回复他们,我们可以讨论。

  2. 实际上,用户不需要看到代码。但由于我们在 GitHub 上,我可能想公开一小部分文件。

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

谁能告诉我应该遵循哪些步骤(最好是命令)?

我是否必须重新组织我的文件夹,例如,制作一个公共(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/

相关文章:

android - Gitignore 不会忽略 Android 库中的一些构建文件

linux - 上传 linux 二进制文件到 maven 仓库

git - 如何更改“团队资源管理器”选项卡的 "Commit All"按钮

git - 将 Master 上的所有新代码移动到 Git 中的新分支

git - 在 git 中,悬挂提交和悬挂 blob 之间有什么区别?

linux - 如何在github上上传Python脚本

maven - 使用GitHub上的maven-release-plugin "You can' t推送到git ://github. com/...”

git - 更改当前分支并保留本地更改

git - 重新创建git标签后出现“tag already exists in the remote"错误

git - Bare 和非 Bare 存储库之间的实际区别是什么?