git 钩子可以向我的代码文件添加版本号吗?



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

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

问题是,如果我使用预提交钩子,那么version.txt指向提交之前提交的提交,但是如果我使用提交后的钩子,那么version.txt在提交后被编辑,并且只能提交到新的提交,该提交会再次编辑version.txt......

我也许可以在提交后使用一个脚本来添加version.txt然后执行git commit --amend --no-edit,但这似乎有点混乱。我也不知道提交后的钩子是否会在修正上运行,从而导致无限循环。

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

有没有更好的方法

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

我通过阅读这个问题找到了答案,尽管我无法通过搜索找到它,所以我打算暂时保留这个问题。我最初的意图在逻辑上是不可能的:你不能在任何提交的文件中拥有当前提交的哈希。哈希取决于文件内容,在我的方法中,文件内容取决于哈希,从而产生循环依赖关系。

我需要改变我的方法。

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

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

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

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

  • 您可以使用 GitLab 推送事件钩子和可以处理 GitLab 事件 https://gist.github.com/pitchart/6d9c6a5e0f8b0969fa4cfd29e4d22f10 的 Apache/PHP 自动运行 deploy.sh

  • 或使用 Jenkins 作业进行部署

最新更新