2010-08-30 52 views
2

我们有一个构建系统,它使用svn ID作为输入到需要五位数字的VM builder设备的输入。当我从git构建时,我通过计算git repo中的提交数来伪造这个。这只是一种工作: - /我想弄清楚:从git存储库中获取版本号

  • 我怎么能从git回购得到一个独特的5位数字。

回答

2

您正在寻找git describe

命令查找最近的标签 是从提交访问。如果 标签指向提交,则 只显示标签。否则,其 后缀的标签名称为 标记对象顶部的附加提交编号为 ,而最近提交的对象名称为 。

$ git describe master 
v1.10-5-g4efc7e1 
+0

您可能会想要使用'--tags'选项,除非您习惯使用仅带注释的标记。 – Cascabel 2010-08-30 22:16:17

0

在git中,每个提交都会生成一个唯一的SHA1哈希ID。运行git log时,您可以看到每次提交的ID。如果您想要最近一次提交的5位数字,您可以执行类似于git log --pretty=oneline --abbrev-commit --abbrev=5 -1的操作。对于我的回购的一个输出看起来是这样的:

$ git log --pretty=oneline --abbrev-commit --abbrev=5 -1  
3b405... fixed css for page title. 

您可以用其他选项进行试验,以git log自定义格式,如果需要的。当然,如果存储库有足够的提交,总是有5位数字不足以保证唯一性的可能性,但是对于足够小的项目它可能会这样做。

2

你想用git的描述正如前面所说的,这里是我的rake任务,打印出来并自动递增semver compliant version numbers

task :version do 
    git_describe = `git describe --dirty --tags --match 'v*'` 

    version, since, sha, dirty = git_describe.strip.split("-") 
    major, minor, patch = version.split(".") 

    version = "#{major}.#{minor}.#{patch}" 

    if sha 
    patch = String(Integer(patch) + 1) 
    version = "#{version}pre#{since}-#{sha[1..sha.length]}" 
    end 

    if [since, dirty].include?("dirty") 
    version = "#{version}-dirty" 
    end 

    puts version 

end 

像这样来使用:

$> rake version

v0.9.8pre32-fcb661d