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

30
我想知道在Github上公开分享私有存储库的文件的最佳方式。
我希望每次推送到我的私有存储库时,该文件会自动更新。
特别地,我有一个.tex项目:我想保密.tex文件,但我想让每个人都可以使用.pdf文件。
注意:我知道gitignore选项的存在,但我不想使用它,因为我想跟踪.tex文件的改进。

1
这里有一个与VonC的答案类似的概念,但不使用子模块。同时使用GitHub Actions工作流程而非bash脚本。 - jrbe228
5个回答

5
Github没有提供这样的功能。Github仓库要么是公共的,要么是私有的,不可能两者兼而有之。然而,如果你想分享的内容足够小(比如说4-5个文件),你可以创建一个公共的gist。不幸的是,没有办法自动更新gist。

不错,但有没有更快捷的方法可以自动更新我感兴趣的文件?(比如最多2或3个...) - Erik Pillon
1
我如何在私有存储库中添加公共代码片段? - Arnab Banerjee

4
我希望保密tex文件,但想让每个人都能够使用pdf文件。您可以创建一个公共仓库(其中包含一个简单的 README),以便上传并关联一个构件(您的pdf文件)作为GitHUb发布。将该公共仓库作为您私有仓库的子模块:这将创建一个子文件夹,其中包含README,解释在哪里找到pdf文件(在公共仓库的发布部分)。然后,您可以从自己的私有仓库中进行以下操作:
  • 更新README(只需创建新提交即可)
  • 标记README子模块仓库(以创建一个您将与其发布相关联的标签)
  • 将您的pdf文件上传到公共仓库发布中,与创建的标签相关联。
所有这些步骤都可以使用GitHub API进行脚本编写:这里提供了一个在bash shell中关注发布上传部分的示例

在这种情况下,我看不出使用子模块的优势。你无论如何都需要两个仓库(公共,私有)。最好只是使用脚本从私有仓库复制(.pdf)更改的文件到公共仓库并从那里提交。正如你所说的那样,这一步也可以编写脚本来自动化。 - Marius Hofert
@MariusHofert 我想的一个多年前的想法是能够克隆一个repo,并通过子模块引用自动获得另一个repo。我没有将生成的二进制文件放在公共repo本身中,而是作为发布物件。 - VonC

3
使用原始链接提供了一个带有“token=”的URL,似乎在一定天数后会过期。

2
您可以基于现有的私有代码库自动创建一个公共的Github代码库。
您可以使用git-exporter。它允许您定义在公共代码库中可用的文件路径。此实用程序将基于具有类似提交历史记录的现有代码库创建一个新的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

0

如果只有一个文件,您可以直接使用原始链接。 在GitHub上找到该文件,然后单击“raw”

只需使用地址栏中的链接即可正常工作...


2
@LorenzBung,它可以工作,我已经测试过了,但我发现它不可靠,因为我们无法知道这个链接会存在多久。 - Mohammed Noureldin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接