如何在提交中包含版本文件?

时间:2013-03-19 13:41:01

标签: git versioning

警告:我不是一个git向导,所以我可能没有正确的术语......

在我将发布版推送到github之前,我创建了一个反映当前提交标记的版本文件,类似于:

git commit -m <insert pithy comment here>
MAJOR=1
MINOR=2
BUILD=`git describe --all --tags`
echo VERSION = [${MAJOR}, ${MINOR}, #{BUILD}] > version.rb
git push origin master

这是有效的,但是对于明显的缺陷,在提交发生后修改了version.rb。我可以将verion.rb添加到.gitignore,但有没有办法在提交后将verion.rb隐藏到配置中而不创建新标记?还是有另一种我没想过的方法?

2 个答案:

答案 0 :(得分:1)

更新

这是一个特定于Ruby的答案,但你可以在你选择的环境中实现相同的东西......

原始答案

在查看评论并深入研究git文档之后,尝试使用git标记作为版本号的一部分似乎是不谨慎的,只是因为git标记在提交之后才可用。

所以我写了一个简单的rake任务来直接在我的config / version.rb文件中删除内部版本号。我在执行提交和部署之前运行此脚本:

# Read config/version.rb file containing
#   VERSION = [a, b, c]
# Overwrite config/version.rb file to contain:
#   VERSION = [a, b, c+1]
task :bump_version do
  desc "increment build number in config/version.rb"
  file = "config/version.rb"
  unless (File.exist?(file))
    $stderr.puts("cannot locate version file #{file}")
  else
    s = File.open(file) {|f| f.read}
    if (s =~ /(\d+)\D+(\d+)\D+(\d+)/)
      s1 = "VERSION = [#{$1}, #{$2}, #{$3.to_i + 1}]"
      $stderr.puts(s1)
      File.open(file, "w") {|f| f.puts(s1) }
    else
      $stderr.puts("cannot parse version file")
    end
  end
end

对我来说很好。

答案 1 :(得分:-1)

使用git commit --ammend -m <pithy comment>将更改添加到上次提交。这将在上面示例中的push命令之前发生。