GitHub:将私有存储库部分公开
我在GitHub上用GitHub:将私有存储库部分公开,git,github,repository,Git,Github,Repository,我在GitHub上用html+css+javascript构建了一个项目,为期半年。它一直在一个私有存储库中,只有一个分支 现在,我想将此存储库部分公开,以便: 用户可以使用问题功能提出问题或编写需求,我可以回答他们,我们可以进行讨论 实际上,用户不需要查看代码。但由于我们在GitHub上,我可能想公开一小部分文件 我不想丢失提交历史记录 谁能告诉我应该遵循哪些步骤(理想情况下是命令) 我是否必须重新组织我的文件夹,例如,创建公用文件夹和专用文件夹?您甚至需要两个独立的存储库。要么代码是公
html+css+javascript
构建了一个项目,为期半年。它一直在一个私有存储库中,只有一个分支
现在,我想将此存储库部分公开,以便:
问题
功能提出问题或编写需求,我可以回答他们,我们可以进行讨论
我是否必须重新组织我的文件夹,例如,创建公用文件夹和专用文件夹?您甚至需要两个独立的存储库。要么代码是公共的,要么不是。您不能仅公开文件的一部分。除非您将这些文件打包为归档文件,并在repo的下载部分提供它们。但如果您想将它们作为存储库使用,则需要将存储库分成两半,例如。G使用
git过滤器树
和--子树过滤器
首先要了解的是GitHub权限模型。提交问题等需要一定程度的回购许可。阅读应该足够了
但read也意味着“能够看到所有代码和历史”。能够看到甚至意味着能够复制和分叉,即使你可以控制什么可以写回你的回购协议。并且没有低于“读取(所有代码)”的访问级别
因此,如果您想自己保存代码,那么在github之外创建某种项目页面,并在那里使用专用的问题跟踪系统,可能对您正在尝试的工作更有意义
如果你决定某些代码应该是公开的,那么你必须有两个回购协议。带有公共代码的回购协议可以设置为只读,或者如果更好地满足您对该代码子集的需求,则可以设置为读/写。无论哪种方式,它都可以主持问题讨论等
将代码的一个子集拆分为公共回购并不太难,但如果您希望公共回购也有完整的历史记录,这就更难了。您将希望避免创建两个不同的公共代码历史,因此您可能必须从私有回购中删除公共代码。(它可以作为一个子模块重新引入—一个指向公共回购的链接—但在最简单的情况下,这确实意味着您希望将公共代码组织在一个目录下。)
如果只需要公开当前版本,那么它就很简单。初始化新的repo,将文件从一个移动到另一个,如果需要,创建子模块链接
如果您想发布已发布文件的历史记录,那么您必须执行类似于git filter branch
的操作,以从原始repo(克隆)创建公共repo。确切的过程取决于具体的要求,但通常您可以使用(a)一个子目录过滤器
仅发布一个目录的内容(到新repo的根目录)-但听起来您的代码并没有安排得那么简单;或者(b)一个索引过滤器
,用于删除要保留私有的文件(同时保留保留保留文件的现有目录结构);或者(c)一个树过滤器
和一个复杂的脚本,您可以随意移动、删除或添加文件,将“原始回购”版本转换为相应的“公共回购”版本
如果您分割了历史记录,您可能仍然希望在原始回购中保留公共文件的历史记录,因为链接回购的历史记录相当困难。大多数情况下,这不是一个巨大的实际限制,除非历史的规模相当大。对不起,我刚刚发现,这是一种与您不同的方法吗?从快速浏览来看,这是一种不适用于您的不同方法(顶部的更新正好说明了我所说的)。他们的私人回购协议不是在GitHub,而是在其他地方或purley local。他们准备一个只包含要共享的文件的分支,并将该分支推送到GitHub存储库。这也是一种涉及到两个独立存储库的方法,一个是公共存储库,一个是私有和公共存储库,公共存储库有一个单独的分支,这是唯一推送到公共远程存储库的分支。我想说,相当笨重和脆弱。谢谢你的回答。我非常喜欢Github的“问题”作为“问题跟踪系统”。你认为用一些项目页面创建一个Github存储库来主要使用它的“问题”特性是否可以接受?我想我不知道是什么让它“可以接受”还是其他。我不记得看到过它,可能是因为有一些网站专门关注问题管理,而没有集成的源代码控制;但我不知道你为什么不能,如果这真的是你想做的