我怎样才能使用" git describe --match"明智地与浅层克隆结合?

时间:2016-02-29 04:21:08

标签: git

我在构建时使用git describe --always --dirty --match version*作为应用程序版本控制的驱动程序。 它看起来大致如下:version.1.2.3

我使用类似version.*的模式标记我的版本,然后构建根据version.1.14.3-24-ged66bf5标记的最后一次提交来确定应用程序的版本。 如果我没有标记给定的提交,那么版本号最终会像--always那样,它基于最新的标记,自该标记以来的提交数量和git commit id。

这对我个人来说非常有效,但我在CI服务器上构建浅层克隆时遇到了问题。

使用"浅克隆"我在jenkins的git构建中的选项(我猜测它正在做什么" - depth = 1"),我的" git describe"命令不再按我想要的那样做。 我的版本号最终只是提交ID - 我想这是因为浅层克隆中没有标记版本,因此describe命令的version.*参数最终会吐出提交ID。

我暂时可以通过不做浅层克隆来解决这个问题。

但是我真的很喜欢用git描述来驱动我的版本 - 即使是浅色克隆,我怎么能继续使用它呢? 我认为我需要做的是在浅克隆时指定我希望深度为#34;从分支的尖端返回到具有匹配{{1的标记的最新版本}}"

这是我可以用Git做的事情吗?

1 个答案:

答案 0 :(得分:2)

你不能:浅层克隆缺少标记对象和它们标记的提交。

更确切地说,这取决于该克隆的深度以及在历史记录中必须走多远才能找到合适的标签。例如,使用--depth 1000制作浅层克隆可能就足够了。确切的数字取决于你所关注的标签 1 之间有多少次提交。

你是正确的,如果git提供了“加深直到标记”,那就可以了,但git没有,更糟糕的是,深化浅层克隆不会自动带来标记。

(有可能编写一个使用git ls-remotegit fetch --depth的脚本来加深克隆,直到出现一些标记的提交,然后让脚本手动应用标记,因为它例如,这可能只需要几十行Python或shell代码,这取决于你想要它的强大程度。但它不包含在git本身中。)

1 在非线性图中,“之间”的概念有点不确定,但我认为这里的总体思路应该足够明确。