gitflow,标记版本号

时间:2014-11-12 10:57:15

标签: git version

我需要两个工作项目:明确的分支模型,以及准确跟踪二进制文件来源的方法。

我想遵循gitflow分支模型,这似乎完全符合我的需要。

对于二进制文件的来源,我在makefile中使用git describe --dirty来生成一个存储在我的二进制文件中的字符串。这样,使用--version选项运行任何可执行文件都可以准确地告诉我它来自何处。

在尝试使用以下两种方法之前,一切似乎都运行良好: 对于从master构建的二进制文件,它可以很好地工作。我有一个干净的版本号,这是最后一个标签的名称。 但是,当我从另一个分支编译时,祖先中没有标记,因此git describe没有生成有用的字符串......

我知道如果没有找到标签,有一个--always选项输出SHA-1,但我真正想要的是“v1.3.2-15-3b7bf9f”,而不是“3b7bf9f”。

如何在所有其他分支上访问master上的标记?我想在将每个标签推到主人之后将主人合并到开发中,但我不确定它是否安全......

我是否遗漏了某些内容,或者gitflow和git describe类似“不兼容”? 我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

git describe无法执行此操作,因为您所使用的提交与master上的标记无关。除了从该分支到主人的合并。

首先,您需要从当前分支和master中找到作为合并库的提交:

$ export mergebase=`git merge-base HEAD master`

这将节省mergebase我们想要的提交(使用bash)。

接下来,您将获得master上的合并提交(使用git rev-list),然后您就可以获得 合并提交中的antecessor标记:

$ export tag=git rev-list --merges --max-count=1 ${mergebase}..master | xargs git describe --tags --abbrev=0

查找HEAD的提交哈希:

$ export commit=`git rev-parse HEAD` 

使用您所在的提交在master上的最新等效标记:

$ echo "${tag}-${commit}"