git hooks可以为我的代码文件添加版本号吗?

时间:2018-04-12 09:03:54

标签: git githooks

我有一个git问题,答案可能是"不要这样做"但是这里: 我希望在我的代码中有一个小对话框(Matlab,因为它发生),它显示当前版本。这主要是为了我(作为开发人员)检查用户运行支持的版本。这是相当标准的,我有Matlab代码从文本文件中读取版本并显示它。 我想要实现的技巧是让Git在每次提交时自动更新version.txt

我使用的代码是.git / hooks / pre-commit中的shell脚本,它基本上将git describe的输出转储到文件version.txt(带有一些格式)。我有主要版本和次要版本的标签,git describe基本上提供了该信息,以及自上一个标签以来的提交数量。

问题是如果我使用预提交钩子,那么version.txt指向提交之前的提交,但是如果我使用post-commit钩子,那么version.txt是提交后编辑,只能提交给新的提交,再次编辑version.txt ...

我或许可以在post-commit中使用添加version.txt然后执行git commit --amend --no-edit的脚本,但这看起来有点混乱。我也不知道post-commit钩子是否会在修改上运行,导致无限循环。

预提交钩子可以编辑代码文件并提交它们,但不知道提交描述。有没有解决的办法?也许我找不到另一个钩子?我可以在不引起无限循环的情况下进行提交后挂钩运行提交,如果可以的话,这是一个好主意吗?

有更好的方法吗?

评论后修改:请注意我的用户没有安装Git。他们从Gitlab下载源代码包并解压缩以运行Matlab代码。因此,任何解决方案都无法在运行中运行Git,但必须从Git获取版本ID(无论如何)并以某种方式将其写入(已提交)文件。

2 个答案:

答案 0 :(得分:0)

我通过阅读this question找到了答案,虽然我无法通过搜索找到答案,所以我打算暂时搁置这个问题。我最初的意图在逻辑上是不可能的:你不能在任何已提交的文件中拥有当前提交的哈希值。散列取决于文件内容,在我的方法中,文件内容取决于散列,给出循环依赖。

我需要改变方法。

尝试解决类似问题的其他人的更新

我创建了一个bash脚本deploy.sh,它可以自动创建标记并将(标记)版本号添加到代码库中的文件中。

答案 1 :(得分:0)

旧帖子,但我想这可能很有用,

完全自动化版本号的两种方法