svn - 在 svn 中保存构建快照的位置

标签 svn version-control build

我们需要以受控方式存档项目的构建输出(在我们的例子中,是一个大小约为 1MB 的单个可执行文件)。

注意:这样做的实际结果是,对于任何已发布的构建输出,我都需要无限期地存档它的不可变副本。 (例如,如果我们从源代码树的 r993、r1014、r1205 和 r1293 构建,我需要为每个保留一个构建输出。)

我们很自然地为此使用 Subversion,因为我们有一个正在运行的服务器。不自然的是将构建输出放在哪里。

  1. 检查源代码树的某个区域 --> 不好,因为它会使更新/合并/等复杂化。

  2. 在与源代码树关联的存储库中创建一个特殊区域例如:

    project-foo/
      branches/
      tags/
      trunk/
      build/        <-- released executables go here
                    (along with metadata containing source references)
    

    我们真的不需要可执行输出的分支或标签;我只需要一个我可以引用的不可变快照的位置(在 SVN 的情况下,通过路径和 rev #)

  3. 在存储库中创建一个与源代码树松散关联的特殊区域例如:

    project-foo/
      branches/
      tags/
      trunk/
    project-foo-build/          <-- released executables go into a subdir:
      branches/
      tags/
      trunk/
    
  4. 使用其他程序而不是 SVN。 ???无论这是什么,都需要支持

    • 不可变数据
    • 与数据关联的元数据
    • 同一类事物的多个版本(例如项目 foo 的构建可执行文件)

有什么建议吗?

我倾向于想法 #2,但想退后一步,更好地了解各种优点/缺点。


*我们需要这样做,因为我们需要维护在某些情况下使用的精确构建输出。这是加载到硬件中的嵌入式代码。理想情况下,构建输出是源代码树的可重复函数,因此如果您使用相同的源代码树构建两次,它会产生相同的输出。不幸的是,情况并非如此,例如随着编译器或其他构建工具的更新。

最佳答案

您不需要将实际 文件存储在 Subversion 存储库中以合理的置信度跟踪它们。您可以做的是创建输出文件,计算文件内容的哈希值(例如 SHA1),然后将文件名和哈希值存储在存储库中。

只要您的输出文件存储备份到至少与您的 Subversion 存储库相同的级别,这样您就不会丢失它们,您就可以确定(在合理的程度上)给定的文件是在您记录哈希时构建生成的输出。

关于svn - 在 svn 中保存构建快照的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5237077/

相关文章:

svn - Apache 上的 Subversion Authz 配置

java - 同一项目的多个不同变体的 Git 流程

rest - Sonatype Nexus REST Api 获取最新的构建版本

git svn 获取 'Error running context: Software caused connection abort at...'

python - 在 apache 和 mod_python 下运行 subversion

perl - 有没有自动从文件中提取常用子程序的工具?

git - IPython Notebook %%bash 魔术错误

version-control - 推送到远程 Mercurial 仓库后,是否可以强制进行 Mercurial 更新?

dynamic - 将构建参数传递给 .wxs 文件以动态构建 wix 安装程序

android - AuthException 未解析为类型和多个 dex 文件 - 构建路径