gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 14:12:07 27 4
gpt4 key购买 nike

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

我用 version.1.2.3 之类的模式标记我的版本,然后构建根据使用 version 之类的标记的最后一次提交计算出应用程序的版本。 * 是。如果我没有标记给定的提交,那么版本号最终会类似于 version.1.14.3-24-ged66bf5,它基于最近的标记,即自该标记以来的提交次数和 git 提交 ID。

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

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

我暂时可以通过不进行浅克隆来处理这个问题。

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

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

最佳答案

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

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

你是对的,如果 git 提供了“加深直到标记”,那会成功,但 git 没有,更糟糕的是,加深浅层克隆不会自动带来标签。

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


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

关于git - 如何将 "git describe --match"与浅克隆结合使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35691922/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com