在 Github 上公开分享私人仓库的一部分

Share publically a part of a private repo on Github

我想知道在 Github 上公开共享 Github 上私人存储库中的文件的最佳方式是什么。

我希望每次在我的私人存储库中自动推送时,文件也会自动更新。

特别是我有一个 .tex 项目:我想对 tex 文件保密,但我想向所有人提供 pdf 文件。

注意 我知道 gitignore 选项的存在,但我不想使用它,因为我想跟踪对 tex 文件的改进

Github 不提供此类功能。 Github 存储库要么是 public 要么是私有的,但不能两者兼而有之。但是,如果您要共享的部分足够小(比如说 4-5 个文件),您可以 create a public gist。不幸的是,没有办法自动更新要点。

I would like to keep secret the tex files but I would like to make available to everyone the pdf file.

您可以将 public 回购(其中包含一个简单的 README)作为 public 回购工件(您的 pdf)上传并关联到

=12=].

添加你私人仓库的 public 仓库 as a submodule:这将创建一个包含 README 的子文件夹,解释在哪里可以找到 pdf(在 [=31 的发布部分=]回购)

然后您可以从您自己的私有存储库中:

  • 更新自述文件(仅用于创建新提交)
  • 标记 README 子模块存储库(创建一个您将与您的版本相关联的标记)
  • 将您的 pdf 上传到 public 回购版本,与创建的标签相关联。

所有这些步骤都可以编写脚本,使用 GitHub API: here is an example (focused on the release upload part) in bash shell

如果只有一个文件,您可以只使用原始文件link。 转到 GitHub 上的那个文件并单击 "raw"

只需在地址栏中使用 link 就可以了...

使用原始 link 提供 URL 和 "token=",它似乎在一定天数后过期。

您可以根据您现有的私人仓库自动创建一个public Github 仓库。

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

示例:

创建config.json:

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

然后运行命令npx gitexporter config.json.

新存储库 my-open-source-repo 仅包含 "*.pdf" 个文件。

然后您可以推送 my-open-source-repo 并将其用作开源。

像这样:

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