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

问题描述 投票:0回答:4

我在GitHub上用

html + css + javascript
搭建了一个项目半年了。它一直在一个私人存储库中,只有一个分支。

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

  1. 用户可以使用

    issues
    功能提出问题或写需求,我可以回复,我们可以讨论。

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

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

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

我是否需要重新组织我的文件夹,例如创建一个公共文件夹和一个私人文件夹?

git github repository
4个回答
4
投票

首先要了解的是GitHub权限模型。 要提交问题等,需要对存储库具有“某种”级别的权限。 阅读应该足够了。 但是 read

does

也意味着“能够查看所有代码和历史记录”。 甚至能够看到意味着能够复制和分叉,即使您控制可以写回存储库的内容。 并且没有比“读取(所有代码)”更低的访问级别。 因此,如果您想保留自己的代码,那么在 github 之外创建某种项目页面,并利用那里的专用问题跟踪系统,可能对您想要做的事情更有意义。

如果您确实决定

某些

代码应该公开,那么您必须拥有两个存储库。 包含公共代码的存储库可以设置为只读,或者读/写(如果这样可以更好地满足您对该代码子集的需求)。 无论哪种方式,它都可以主持问题讨论等。 将代码子集拆分到公共存储库中并不“太难”,但如果您希望公共存储库也具有完整的历史记录,那就更难了。 您需要避免创建公共代码的两个不同的历史记录,因此您可能必须从私有存储库中删除公共代码。 (它可以作为子模块重新引入 - 公共存储库的链接 - 但在最简单的情况下,这确实意味着您需要将公共代码组织在单个目录下。)

如果只需要公开当前版本,那就很简单了。 您初始化新的存储库,将文件从一个存储库移动到另一个存储库,如果需要,可以创建子模块链接。 如果您想发布已发布文件的历史记录,那么您必须执行类似

git filter-branch

的操作才能从原始存储库(克隆)创建公共存储库。 确切的过程取决于确切的要求,但通常您可以使用 (a) a

subdirectory-filter

来仅发布一个目录的内容(到新存储库的根目录) - 但听起来您的代码未安排让这变得容易;或 (b)

index-filter
删除您想要保密的文件(同时保留剩余文件的现有目录结构);或 (c) 一个
tree-filter
以及您喜欢移动、删除或添加文件的复杂脚本,将“原始存储库”版本转换为相应的“公共存储库”版本。

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

您肯定需要两个存储库。但您可以自动创建公共部分。


3
投票
git-exporter

。它允许您定义公共存储库中可用的文件路径。该实用程序基于具有相似提交历史记录的现有 git 存储库创建一个新的 git 存储库。只有允许的文件才会包含在提交内容中。

示例: 创建

config.json

:

{ "forceReCreateRepo": true, "targetRepoPath": "my-open-source-repo", "sourceRepoPath": ".", "allowedPaths": ["build/*"], "ignoredPaths": ["src/*"] }

然后运行命令

npx gitexporter config.json

因此,将创建一个新存储库

my-open-source-repo
,其中仅包含某些文件,同时保留整个提交历史记录。

然后您可以推送

my-open-source-repo
并将其作为开源使用。

像这样:

cd my-open-source-repo
git remote set-url origin new.github.com/username/open-source-repo-name
git push origin master

您还可以创建一个 CI 脚本来自动更新您的公共

my-open-source-repo

您甚至需要两个单独的存储库。代码要么公开,要么不公开。您不能仅公开部分文件。除非您将这些文件打包为存档并在存储库的下载部分中提供它们。但是,如果您想让它们作为存储库可用,您需要将存储库分成两半,例如。 g。与 

git filter-tree

1
投票
--subtree-filter

    
将您想要私有的代码作为包制作,并使用公共存储库中的包作为依赖项。


0
投票

© www.soinside.com 2019 - 2024. All rights reserved.