从git存储库中获取版本号

时间:2010-08-30 20:27:18

标签: git continuous-integration

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

  • 如何从git repo中获取唯一的5位数字。

3 个答案:

答案 0 :(得分:2)

您正在寻找git describe

  

该命令可找到最新的标记   可以从提交中获得。如果   然后,标签指向提交   只显示标签。否则,它   标签名称后缀为数字   在...之上的其他提交   标记对象和缩写   最近提交的对象名称。

$ git describe master
v1.10-5-g4efc7e1

答案 1 :(得分:2)

如前所述,你想使用 git describe ,这是我的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

答案 2 :(得分:0)

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

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

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