我需要两个工作项目:明确的分支模型,以及准确跟踪二进制文件来源的方法。
我想遵循gitflow分支模型,这似乎完全符合我的需要。
对于二进制文件的来源,我在makefile中使用git describe --dirty
来生成一个存储在我的二进制文件中的字符串。这样,使用--version选项运行任何可执行文件都可以准确地告诉我它来自何处。
在尝试使用以下两种方法之前,一切似乎都运行良好:
对于从master构建的二进制文件,它可以很好地工作。我有一个干净的版本号,这是最后一个标签的名称。
但是,当我从另一个分支编译时,祖先中没有标记,因此git describe
没有生成有用的字符串......
我知道如果没有找到标签,有一个--always选项输出SHA-1,但我真正想要的是“v1.3.2-15-3b7bf9f”,而不是“3b7bf9f”。
如何在所有其他分支上访问master上的标记?我想在将每个标签推到主人之后将主人合并到开发中,但我不确定它是否安全......
我是否遗漏了某些内容,或者gitflow和git describe
类似“不兼容”?
我该如何解决这个问题?
答案 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}"