从github项目分发二进制文件的最佳实践是什么?[关闭]


71

从github项目分发二进制文件的最佳实践是什么?

我可以想到:

  • 在您的项目中创建一个bin文件夹,在其中保存二进制文件的副本。但是,github是要存储源代码的,而不是二进制文件的。存储大型且定期更改的二进制文件可能在磁盘空间和带宽上很昂贵?
  • 将二进制文件的副本上载到项目的github页面,或使用单独的网站托管二进制文件。但是,这并不总是可行的,并且需要更多(手动)工作来使二进制文件保持最新,我宁愿让二进制文件自动更新或通过单个操作进行更新。

这个问题是关于在哪里托管二进制文件,以及关于在哪里托管文件的建议的主题
随机

2
@random我将其阅读为有关如何使用github的问题。
唐·哈奇

Answers:


63

从2012年12月11日起,不建议使用GitHub上Downloads功能。文章分发大型二进制文件建议使用外部服务:

我们建议将Amazon S3CloudFront配对用于存储,以通过CDN或SourceForge等其他服务进行服务。


但是,自2013年7月2日起,您现在可以定义发布

发布,一个将软件交付给最终用户的工作流程。
发行版是具有变更日志和二进制资产的一流对象,除了Git工件外,还提供完整的项目历史记录。可从存储库的主页访问它们:

主页

  • 发行随附发行说明和下载软件或源代码的链接。
  • 遵循许多Git项目的约定,发行版与Git标签相关。您可以使用现有标签,也可以让发布版本在发布标签时创建标签。
  • 您还可以将二进制资产(例如编译的可执行文件,缩小的脚本,文档)附加到发行版。一旦发布,所有可以查看该信息库的人都可以使用发行详细信息和资产。

发布


“ github页面”是公开的。“ github版本”需要一个github帐户。:-(
Gerd K

是的,github已发布。我刚刚创建了我的第一个项目,推送了源代码,在GitHub Web UI中转到“发布”,创建了新版本(输入了所需的版本号,然后GitHub在我的仓库中将其变成了标签),我能够使用我的二进制文件上传文件。GitHub在源代码中添加了TGZ nad ZIP,因此可以下载三个文件。非常干净和无缝。谢谢你这个话题顺便说一句。让我走上了正轨。
frr

18

现在我很清楚,重要的是不要在您的github项目本身中存储二进制文件。因此,您将需要在其他位置存储二进制文件。我遇到的可能解决方案是:

  • 将二进制文件存储在单独的子模块中(dalores idea)。将它们存储在项目github页面中是有意义的,您可以使用它们通过github托管项目网站。
  • 如果只有几个二进制文件或zip文件,则可以通过下载->上传新文件将它们上传到github。但是,此功能非常有限,您不能将文件放在结构化的文件夹中。
  • 如果是Java jar文件,则可以使用Nexus之类的解决方案来管理您的库。
  • 将二进制文件存储在您自己托管的完全独立的站点中

7
为什么不将二进制文件存储在github项目本身中很重要?
紫罗兰色长颈鹿

1
您的源代码通常处于持续开发中,始终都有大量提交和少量更改。另一方面,二进制文件是由稳定版本的代码生成的,这些稳定版本在发布后永远不会更改。对于二进制文件,您希望有一个列出所有发行版本的目录,而不仅仅是最新版本。彼此完全相反。
Jos de Jong

1
GitHub上传现已弃用。参见github.com/blog/1302-goodbye-uploads
akaihola 2014年

将大型二进制文件添加到您的仓库中将使下载历史记录花费很长时间。
jcoffland

2

什么样的二进制文件?二进制文件一定是从某个源头来的吧?

因此,在git中添加将这些二进制文件构建为子模块的源代码。然后在构建过程中,先构建这些二进制文件,然后再构建源代码。子模块与您知道有效的源的特定版本保持同步。您也可以获得源代码,因此调试起来更加容易。

除非二进制文件是图像等,否则只需存储它们即可。

如果空间不足,请使用bitbucket,因为它们具有无限的空间。


例如,我有一个从Java项目生成的Java库(jar)。我需要存储该库,以便库用户可以下载该库,而无需自己构建库。随着开发的继续,我还需要存储jar的不同版本(1.3.0、1.3.1、1.4.0等)。
乔斯德容

1
对于jar文件,您不能将其存储在nexus中并使用maven下载依赖项吗?那是标准的Java方法。参见stackoverflow.com/questions/3329041/…–
达洛尔

谢谢,这很有意义。因此,至少很明显,最好不要将jar和二进制文件存储在git本身中,而是使用外部解决方案。
Jos de Jong 2012年

是的,这不是现成的答案,但它为我指明了正确的方向。我将遇到的解决方案放在单独的答案中。
Jos de Jong
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.