【问题标题】:how to embed DVCS revision information when building without it如何在没有 DVCS 修订信息的情况下嵌入它
【发布时间】:2013-03-01 00:16:23
【问题描述】:

在我的构建系统中,每次运行新构建时,我都会将当前提交的修订和哈希信息保存在几个变量中,并在我的源代码中使用它们而不会出现问题。例如,窗口标题的格式类似于“NAME-REVISION-HASH”。

唯一的问题是,有时人们通过下载不包含提交信息的标准源来构建项目,因此修订和哈希都是 0ed。

可以做些什么来防止这种情况发生?添加包含此类信息的单独文件违背了使用分布式版本控制系统的优势,因为它需要在每次提交时手动更新......

有没有办法让没有 dvcs 的人获得正确的修订和哈希信息?

【问题讨论】:

  • 只需克隆 repo 方式来获取源代码。期望能够构建您的项目的开发人员使用与您相同的版本控制系统是合理的。想想所有这些公共代码托管网站(Google Code、github、bitbucket、Codeplex 等)是如何工作的。

标签: git version-control mercurial cmake software-distribution


【解决方案1】:

添加包含此类信息的单独文件会破坏使用分布式版本控制系统的优势

WTF? “人们通过下载标准源来构建项目......”因为他们没有任何 VCS,还有一个文件“无视”任何东西

因为它需要在每次提交时手动更新

然后呢?带有专门准备的关键字(或文本常量)的自动提交文件不是一个大问题,至少对于 Mercurial 而言

【讨论】:

  • 是的,但是每次提交完成时该文件都会更改,并且会使用该附加信息污染文件的提交列表...
  • @koda - 是的,但价格公道(IMNSHO):你不能“一劳永逸”。但我(个人)喜欢 Ry4an 的想法
【解决方案2】:

您可以使用git describe 获取唯一的字符串,然后您可以将其包含在您的构建中。 git 本身这样做是为了设置它的版本(git version 此处返回 git version 1.8.2.rc1.19.g443d803,即 1.8.2-rc1 + 19 次提交,最新提交具有 SHA1 443d803e0dacd0a1c6700503689f3cd95751aba1;@987654336@ 返回@987654336@4)。

从 SCCS 时代开始就有扩展 $Id:$ 和其他关键字结构的习惯,这在 VCS 只处理单个文件的时代非常有意义;这在今天是退化的(git 根本不做任何“关键字扩展”)。

【讨论】:

    【解决方案3】:

    如果您使用 Mercurial 生成档案,它已经为您处理好了。 hg archive 命令自动为 Web UI tarball / zip 下载提供动力,其中包含一个 .hg_archival.txt 文件,如下所示:

    repo: 0339f7b37c3416248e4e0b183a481aa40ade150e
    node: 0339f7b37c3416248e4e0b183a481aa40ade150e
    branch: default
    latesttag: null
    latesttagdistance: 1
    

    因此您的代码可以使用首先检查本地存储库以获取版本信息的逻辑,如果不存在则查找.hg_archival.txt 文件。如果您要标记发布,latesttaglatesttagdistance 特别方便。您可以使用它们来构建对人类和 DVCS 都有用的版本字符串,例如:

    2.0.1-5-40ade150e
    

    可以理解为“自 2.0.1 版以来的五次提交,哈希值为 40ade150e”

    【讨论】:

    • 请注意 - 如果您想遵循“语义版本控制”(不是一个坏主意),“之后的变更集”必须用“+”分隔。 2.0.1+5-40ade150e
    【解决方案4】:

    来自another question

    现在 Git 支持 $Id:$。为文件启用它 README 您可以将“README ident”放入 .gitattributes。支持文件名上的通配符。详情请见man gitattributes

    【讨论】:

      猜你喜欢
      • 2017-11-24
      • 2014-04-17
      • 1970-01-01
      • 2015-02-16
      • 2018-08-14
      • 2017-07-22
      • 2020-01-20
      • 2014-04-11
      • 1970-01-01
      相关资源
      最近更新 更多