我应该在github存储库中包含configure和makefile吗?

vy3*_*y32 10 automake autoconf software-distribution github

我们最近从subversion转移到git,然后转到Github,用于几个开源项目.Github很不错,因为它提供了很多功能.我特别喜欢的一件事是能够下载标签zip.tar.gz文件.

不幸的是,Github最近停止了下载.这应该不是问题,因为能够下载标签.然而,在过去我们没有把Makefile,configure脚本或任何其他Autoconf生成的文件到回购,因为他们得到很多的冲突,当人们合并.

处理这个问题的正确方法是什么?

  • 我应该在回购中放置autoconf和automake生成的文件,以便人们可以直接下载标签吗?
  • 或者应该有一个bootstrap.sh文件,并告诉人们运行该文件?
  • 或者我应该做一个make dist并将其放入回购中?

谢谢

Psy*_*aut 15

发布make distvia GitHub Releases 的输出

您的第一个选择 - 将Autoconf和Automake生成的文件放入存储库 - 不是一个好主意.将生成的文件存储在源代码管理中几乎没有用处.在这种情况下,它将使用许多不必要且可能相互冲突的提交来污染您的历史记录,特别是如果并非所有贡献者都使用相同版本的Autotools.你的第三个选项 - 检查输出make dist- 是一个坏主意,原因与第一个选项完全相同.

你的第二个选择 - 添加一个调用Autoconf和Automake生成configure脚本的"bootstrap" 脚本 - 也是一个坏主意.这违背了Autotools的全部目的,即使您的源可以跨系统移植 - 包括那些Autotools不可用的系统!(如果有人想在他们没有root访问权限的机器上构建和安装你的软件,以及没有安装GNU Build System的地方会发生什么.一个bootstrap脚本不会帮助他们,因为他们是首先需要进行Autotools的本地安装以及可能的所有依赖项.)

释放使用Autotools的代码的正确方法是生成一个tarball make dist(或者更好make distcheck,因为这也将运行测试并进行其他健全性检查),然后在源存储库以外的地方发布此tarball .

从2013年4月起,您的原始问题表明GitHub已停止下载页面.但是,在2013年7月,GitHub添加了"Releases"功能,不仅可以预先封装源标签,还可以将任意文件附加到每个版本.所以在GitHub上,Releases页面是你应该发布make disttarball的地方(最好也是它们的独立GnuPG签名).

基本步骤

  1. 当您准备发布时,标记它并将标记推送到GitHub: $ git tag 1.0 # Also use -s if desired $ git push --tags
  2. 使用Makefile生成tarball: $ make dist # Alternatively, 'make distcheck'
  3. 访问项目的GitHub页面,并点击"发布"链接: 显示版本链接位置的GitHub项目的屏幕截图
  4. 您将进入项目的"发布"页面.第一次访问时,您将看到的是一个标记列表,并从源树中自动生成tarball: GitHub发布页面 按"草稿新版本"按钮.
  5. 然后,您将看到一个表单,您应在其中填写与发布相关联的Git标记以及可选的标题和说明.在此之下还有一个文件选择器,标记为"通过将二进制文件放在此处或选择它们来附加二进制文件" 使用它来上传您在步骤2中创建的tarball(也可能是它的独立GnuPG签名). 起草GitHub版本 完成后,按"发布释放"按钮.
  6. 您项目的"发布"页面现在将显示该版本,包括附加文件的突出下载链接: 完成了GitHub发布页面

如果您不想使用GitHub版本,那么正如之前的答案所指出的那样,您应该将tarball上传到其他地方,例如您自己的网站或FTP站点.从项目中添加指向此存储库的链接,README.md以便用户可以找到它.


Von*_*onC 4

第二个是更好的:你希望你的repo的任何用户尽可能快地启动和运行,重新生成他/她需要的东西来构建你的程序.

由于Git是一个非常适合文本的版本控制(而不是像Nexus这样工件仓库),因此提供一种生成最终二进制文件的方法是可行的.

  • @ vy32会有一个很大的"自述文件"帮助他们开始吗? (3认同)