Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Git 如何在没有DVCS版本信息的情况下嵌入DVCS版本信息_Git_Version Control_Mercurial_Cmake_Software Distribution - Fatal编程技术网

Git 如何在没有DVCS版本信息的情况下嵌入DVCS版本信息

Git 如何在没有DVCS版本信息的情况下嵌入DVCS版本信息,git,version-control,mercurial,cmake,software-distribution,Git,Version Control,Mercurial,Cmake,Software Distribution,在我的构建系统中,每次运行新构建时,我都会将当前提交的修订和哈希信息保存在几个变量中,并在我的源代码中使用它们,而不会出现问题。例如,窗口标题的格式类似于“NAME-REVISION-HASH” 唯一的问题是,有时人们通过下载不包含提交信息的标准源来构建项目,因此修订和哈希都是0 可以采取什么措施来防止这种情况?添加包含此类信息的单独文件违背了使用分布式版本控制系统的优点,因为它需要在每次提交时手动更新 有没有一种方法可以让没有DVC的用户获得正确的修订和哈希信息?您可以使用git descri

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

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

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


有没有一种方法可以让没有DVC的用户获得正确的修订和哈希信息?

您可以使用
git descripe
获得一个唯一的字符串,然后将其包含在构建中
git
本身会这样做来设置它的版本(
git version
此处返回
git version 1.8.2.rc1.19.g443d803
,即,1.8.2-rc1+19提交,最新提交有SHA1 443d803e0dacd0a1c6700503689f3cd95751aba1;
git description
返回
v1.8.2-rc1-19-g443d803

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

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

WTF?“人们通过下载标准源来构建项目…”因为他们没有任何VCS,所以多了一个文件“无法”任何东西

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


然后呢?使用专门准备的关键字(或文本常量)自动提交的文件不是大问题,至少对于Mercurial来说是这样,如果您使用Mercurial生成已经为您处理过的归档文件。
hg archive
命令自动为web UI tarball/zip下载提供动力,其中包含一个
.hg\u archive.txt
文件,如下所示:

repo: 0339f7b37c3416248e4e0b183a481aa40ade150e
node: 0339f7b37c3416248e4e0b183a481aa40ade150e
branch: default
latesttag: null
latesttagdistance: 1
因此,您的代码可以使用逻辑,首先检查本地repo以获取版本信息,如果没有,则查找
.hg_archive.txt
文件。如果要标记发行版,则
latesttag
latesttagdistance
特别方便。您可以使用它们构建对人类和DVCSs都有用的版本字符串,如:

2.0.1-5-40ade150e
这可以理解为“自2.0.1版以来的五次提交,散列为40ade150e”

来自:

现在已经有了对$Id:$Git的支持。为文件启用它 自述文件您可以将“自述文件标识”放入.gittributes中。支持文件名上的通配符。有关详细信息,请参阅


只需将复制回购协议作为获取来源的方式。有理由期望希望能够构建项目的开发人员使用与您相同的版本控制系统。想想所有这些公共代码托管网站(谷歌代码、github、bitbucket、Codeplex等)是如何工作的。可能重复的是,但该文件会在每次提交时更改,并会用这些附加信息污染文件的提交列表…@koda-是的,但这是公平的价格(IMNSHO):你不能“一无所获”。但我(个人)喜欢Ry4an的ideaJust note——如果你想遵循“语义版本控制”(这主意不错),“之后的变更集”必须用“+”分隔<代码>2.0.1+5-40ade150e