gitflow、标签和版本号

gitflow、标签和版本号,git,version,Git,Version,对于一个工作项目,我需要两样东西:一个清晰的分支模型,以及一种精确跟踪二进制文件来源的方法 我想遵循gitflow分支模型,它似乎完全适合我的需要 对于二进制文件的起源,我在makefiles中使用git descripe--dirty,生成一个存储在二进制文件中的字符串。这样,使用--version选项运行任何可执行文件都可以准确地告诉我它的来源 在尝试使用这两种方法之前,一切似乎都很正常: 对于从master构建的二进制文件,它可以完美地工作。我有一个干净的版本号,这是最后一个标签的名称。

对于一个工作项目,我需要两样东西:一个清晰的分支模型,以及一种精确跟踪二进制文件来源的方法

我想遵循gitflow分支模型,它似乎完全适合我的需要

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

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

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

如何使主控上的标记可以从所有其他分支访问?我想在每个标签都贴在master上之后将master合并到develop中,但我不确定它是否安全

是我遗漏了什么,还是gitflow和git description有点“不兼容”?
如何修复此问题?

git descripe
无法执行此操作,因为您执行的提交与
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 description--tags--abbrev=0

正在查找头的提交哈希:

$ export commit=`git rev-parse HEAD` 
以及主服务器上的最新等效标记,以及您所处的提交:

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

它似乎不符合我的要求。您的解决方案可以在master中找到最新的合并,而不是我所在的提交中的最后一个合并。另外,最终的输出是找到的标记的
git descripe
,而不是当前状态。我提出的解决方案只是在您所在分支的最新merge on master之前在master上找到最新的标记。我想不出另一种方法来得到标签。使用该标记,您可以对其进行格式化,以添加当前提交的哈希值。