Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
GitHub:将私有存储库部分公开_Git_Github_Repository - Fatal编程技术网

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

GitHub:将私有存储库部分公开,git,github,repository,Git,Github,Repository,我在GitHub上用html+css+javascript构建了一个项目,为期半年。它一直在一个私有存储库中,只有一个分支 现在,我想将此存储库部分公开,以便: 用户可以使用问题功能提出问题或编写需求,我可以回答他们,我们可以进行讨论 实际上,用户不需要查看代码。但由于我们在GitHub上,我可能想公开一小部分文件 我不想丢失提交历史记录 谁能告诉我应该遵循哪些步骤(理想情况下是命令) 我是否必须重新组织我的文件夹,例如,创建公用文件夹和专用文件夹?您甚至需要两个独立的存储库。要么代码是公

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

现在,我想将此存储库部分公开,以便:

  • 用户可以使用
    问题
    功能提出问题或编写需求,我可以回答他们,我们可以进行讨论

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

  • 我不想丢失提交历史记录

  • 谁能告诉我应该遵循哪些步骤(理想情况下是命令)


    我是否必须重新组织我的文件夹,例如,创建公用文件夹和专用文件夹?

    您甚至需要两个独立的存储库。要么代码是公共的,要么不是。您不能仅公开文件的一部分。除非您将这些文件打包为归档文件,并在repo的下载部分提供它们。但如果您想将它们作为存储库使用,则需要将存储库分成两半,例如。G使用
    git过滤器树
    --子树过滤器
    首先要了解的是GitHub权限模型。提交问题等需要一定程度的回购许可。阅读应该足够了

    但read也意味着“能够看到所有代码和历史”。能够看到甚至意味着能够复制和分叉,即使你可以控制什么可以写回你的回购协议。并且没有低于“读取(所有代码)”的访问级别

    因此,如果您想自己保存代码,那么在github之外创建某种项目页面,并在那里使用专用的问题跟踪系统,可能对您正在尝试的工作更有意义

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

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

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

    如果您想发布已发布文件的历史记录,那么您必须执行类似于
    git filter branch
    的操作,以从原始repo(克隆)创建公共repo。确切的过程取决于具体的要求,但通常您可以使用(a)一个
    子目录过滤器
    仅发布一个目录的内容(到新repo的根目录)-但听起来您的代码并没有安排得那么简单;或者(b)一个
    索引过滤器
    ,用于删除要保留私有的文件(同时保留保留保留文件的现有目录结构);或者(c)一个
    树过滤器
    和一个复杂的脚本,您可以随意移动、删除或添加文件,将“原始回购”版本转换为相应的“公共回购”版本


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

    对不起,我刚刚发现,这是一种与您不同的方法吗?从快速浏览来看,这是一种不适用于您的不同方法(顶部的更新正好说明了我所说的)。他们的私人回购协议不是在GitHub,而是在其他地方或purley local。他们准备一个只包含要共享的文件的分支,并将该分支推送到GitHub存储库。这也是一种涉及到两个独立存储库的方法,一个是公共存储库,一个是私有和公共存储库,公共存储库有一个单独的分支,这是唯一推送到公共远程存储库的分支。我想说,相当笨重和脆弱。谢谢你的回答。我非常喜欢Github的“问题”作为“问题跟踪系统”。你认为用一些项目页面创建一个Github存储库来主要使用它的“问题”特性是否可以接受?我想我不知道是什么让它“可以接受”还是其他。我不记得看到过它,可能是因为有一些网站专门关注问题管理,而没有集成的源代码控制;但我不知道你为什么不能,如果这真的是你想做的