在我的构建系统中,每次我运行新的构建时,我都会将当前提交的修订和散列信息保存在几个变量中,并在源代码中使用它们,而不会出现问题。例如,窗口标题的格式类似于“名称-修订-散列”。
唯一的问题是,有时人们通过下载不包含提交信息的标准源代码来构建项目,因此修订和散列都是0ed。
可以做些什么来防止这种情况发生?添加一个包含这类信息的单独文件会破坏使用分布式版本控制系统的优势,因为它在每次提交时都需要手动更新...
有没有一种方法可以让没有dvcs的人获得正确的版本和散列信息?
发布于 2013-03-01 09:35:41
添加包含此类信息的单独文件,这与使用分布式版本控制系统的优点不符
见鬼?“人们通过下载标准源代码来构建项目……”因为它们没有任何VCS,所以再多一个文件就不会有任何问题
,因为每次提交时都需要手动更新它。
然后呢?使用专门准备的关键字(或文本常量)自动提交的文件不是大问题,至少对于Mercurial是这样
发布于 2013-03-01 09:11:54
您可以使用git describe来获取唯一的字符串,然后可以将其包含在构建中。git本身这样做是为了设置它的版本(这里的git version返回git version 1.8.2.rc1.19.g443d803,即1.8.2-rc1 + 19提交,最新提交具有SHA1 443d803e0dacd0a1c6700503689f3cd95751aba1;git describe返回v1.8.2-rc1-19-g443d803)。
在SCCS时代,出现了扩展$Id:$和其他关键字结构的习惯,在VCS只处理单个文件的那些日子里,这是非常有意义的;这在今天已经过时了( git根本不做任何“关键字扩展”)。
发布于 2013-03-01 09:36:12
如果您正在使用Mercurial生成存档,那么已经为您处理好了。支持web UI tarball / hg archive下载的.hg_archival.txt命令会自动包含一个如下所示的zip文件:
repo: 0339f7b37c3416248e4e0b183a481aa40ade150e
node: 0339f7b37c3416248e4e0b183a481aa40ade150e
branch: default
latesttag: null
latesttagdistance: 1因此,您的代码可以使用这样的逻辑:首先检查本地存储库以获取版本信息,如果本地存储库不存在,则查找.hg_archival.txt文件。如果要标记版本,latesttag和latesttagdistance会特别方便。您可以使用它们构建对人类和DVCS都有用的版本字符串,如下所示:
2.0.1-5-40ade150e它可以理解为“从2.0.1版本开始的五次提交,散列为40ade150e”。
https://stackoverflow.com/questions/15148184
复制相似问题