繁体   English   中英

如何将“git describe --match”与浅层克隆结合使用?

[英]How can I use “git describe --match” sensibly in combination with a shallow clone?

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

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

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

在 jenkins 的 git 构建中使用“浅克隆”选项时(我猜它只是在执行“--depth = 1”),我的git describe命令不再执行我想要它做的事情。 我的版本号最终只是提交 id - 我猜这是因为浅克隆中没有标记版本,所以 describe 命令的--always参数最终会吐出提交 id。

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

但我真的很喜欢从 git describe 驱动我的版本控制 - 即使使用浅克隆,我如何继续使用它? 我认为我需要能够做的是在浅克隆时指定,我希望深度是“从分支的尖端回到具有标签匹配version.*的最新version.* ”。

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

您不能:浅克隆缺少标记对象并提交它们标记。

更准确地说,这取决于该克隆的深度以及一个人必须在历史上追溯多远才能找到合适的标签。 例如,使用--depth 1000制作浅层克隆可能就足够了。 确切的数字取决于您在1 个您关心的标签之间有多少提交。

你是对的,如果 git 提供了一个“深入直到标记”,那就可以解决问题,但 git 没有,更糟糕的是,加深浅克隆不会自动带来标签。

(可以编写一个脚本,使用git ls-remotegit fetch --depth继续深化克隆,直到出现一些标记的提交,然后让脚本手动应用标记,就像这样。这可能例如,只需要几十行 Python 或 shell 代码,具体取决于您想要它的健壮程度。但它不包含在 git 本身中。)


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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM