使私人存储库部分公开

时间:2017-05-30 11:57:04

标签: git github repository

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

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

  1. 用户可以使用issues功能提问或撰写要求,我可以回复,我们可以进行讨论。

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

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

  4. 有谁能告诉我我应遵循的步骤(和理想的命令)是什么?我是否必须重新组织我的文件夹,例如,制作公用文件夹和私人文件夹(我希望不会)?

2 个答案:

答案 0 :(得分:1)

您甚至需要两个单独的存储库。代码是公开的还是不公开的。你不能只公开一部分文件。除非您将这些文件打包为存档,并在repo的下载部分提供它们。但是如果你想将它们作为存储库提供,你需要将存储库分成两半,例如: G。使用git filter-tree--subtree-filter

答案 1 :(得分:1)

首先要了解的是GitHub权限模型。要提交问题等,需要某些级别的回购权限。阅读应该足够了。

但是阅读确实也意味着能够查看所有代码和历史记录"。并且能够看到甚至意味着能够复制和分叉,即使您控制可以写回您的回购的内容。并且没有低于"读取(所有代码)"。

的访问级别

因此,如果您想保留自己的代码,然后创建除github之外的某种项目页面,并在那里使用专用的问题跟踪系统,可能只是对您尝试做的事情更有意义

如果你确定某些代码应该是公开的,那么你必须有两个回购。具有公共代码的repo可以是只读的,或者如果更好地满足您对该代码子集的需求则可读/写。无论哪种方式,它都可以主持问题讨论等。

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

如果只需要公开当前版本,那么它很简单。您启动新的repo,将文件从一个移动到另一个,如果需要,创建子模块链接。

如果要发布已发布文件的历史记录,则必须执行git filter-branch之类的操作,以便从原始仓库(克隆)创建公共仓库。确切的过程取决于确切的要求,但通常你可以使用(a)subdirectory-filter只发布一个目录的内容(到新的repo的根目录) - 但听起来你的代码不是&# 39;安排使这容易;或(b)index-filter删除您想要保密的文件(同时保留剩余文件的现有目录结构);或者(c)一个tree-filter和一个复杂的脚本,你想移动,删除或添加文件,转换一个原始的回购"将版本转换为相应的公共回购"版本

如果您确实拆分了历史记录,那么您可能仍然希望将公共文件的历史记录保留在原始仓库中,因为只需链接回购路径即可。历史相当困难。除非历史的规模相当大,否则在大多数情况下这不是一个巨大的实际限制。