我有一个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(无论如何)并以某种方式将其写入(已提交)文件。
答案 0 :(得分:0)
我通过阅读this question找到了答案,虽然我无法通过搜索找到答案,所以我打算暂时搁置这个问题。我最初的意图在逻辑上是不可能的:你不能在任何已提交的文件中拥有当前提交的哈希值。散列取决于文件内容,在我的方法中,文件内容取决于散列,给出循环依赖。
我需要改变方法。
尝试解决类似问题的其他人的更新:
我创建了一个bash脚本deploy.sh,它可以自动创建标记并将(标记)版本号添加到代码库中的文件中。
答案 1 :(得分:0)
旧帖子,但我想这可能很有用,
完全自动化版本号的两种方法
您可以使用 gitlab push-event 钩子和可以处理 gitlab 事件 https://gist.github.com/pitchart/6d9c6a5e0f8b0969fa4cfd29e4d22f10
的 apache / php 自动运行 deploy.sh或使用 jenkins 作业进行部署