我的应用程序可以知道它的Git标签吗?

我的应用程序可以知道它的Git标签吗?,git,tags,Git,Tags,我似乎记得在另一个版本管理系统中看到,您可以在代码中放入一个复杂的魔术字符串,版本管理系统将自动用版本字符串替换该模式。 关键是,我希望在我的应用程序中有一个“关于”对话框,显示当前版本。在我所看到的关于Git的一切中,它丝毫没有改变您的源代码。另一个想法是git创建一个源代码可以读取的文本文件 显示版本。 我不喜欢必须调用Git并手动将标记复制到代码中的想法。您可以设置一个post-commit钩子来调用python脚本,如 (也来自) 目标: 我希望版本字符串和/或其他有用信息能够自动嵌入到

我似乎记得在另一个版本管理系统中看到,您可以在代码中放入一个复杂的魔术字符串,版本管理系统将自动用版本字符串替换该模式。 关键是,我希望在我的应用程序中有一个“关于”对话框,显示当前版本。在我所看到的关于Git的一切中,它丝毫没有改变您的源代码。另一个想法是git创建一个源代码可以读取的文本文件 显示版本。
我不喜欢必须调用Git并手动将标记复制到代码中的想法。

您可以设置一个post-commit钩子来调用python脚本,如
(也来自)

目标:

我希望版本字符串和/或其他有用信息能够自动嵌入到应用程序代码中,可以说是“编译”,而无需每次都记住手动执行

工作流程:

  • 您正在处理存储库,现在可以将当前版本升级到下一个版本了
  • 创建一个发布标签,
    git标签-a v0.0.2-m“Bump版本”
  • 定义您的
    NEXT
    版本,即通过运行
    gitver NEXT 0.0.3
  • 运行
    gitver
    并检查一切是否正常
  • 可选:通过运行
    gitver preview
    gitver update
    预览或更新项目的版本信息模板,然后重新生成项目以反映版本更改
  • 现在可以执行发布之间的任何其他手动内部管理
  • 现在,您正在努力开发下一个版本,当发布时间再次到来时,请重复此操作
这有助于生成一个包含正确元数据信息的文件(如从app last标记派生的版本),供您在构建过程中使用

  • Git不支持可扩展的“关键字”——这是Linus的政策
  • 在我所看到的关于Git的一切中,它丝毫没有改变您的源代码

    错。它可以而且可以做到——跨平台使用的“文本规范化”是git最头疼的问题

    关键是,我希望在我的应用程序中有一个“关于”对话框,显示当前版本

    在引擎盖下,它几乎总是
    git descripe
    output,您可以在工作目录上使用哪个命令(在构建阶段),然后存储和使用

    • 优点:简单
    • 相反:在构建过程中增加额外的复杂性级别
    另一个实现是“smudge | clean filters”:关键字作为静态文本存储在存储库中,转换为工作目录中动态变化的元素(与过滤器相关的程序执行此双向转换)

    • 赞成:透明性(您在存储库中已经拥有了所有内部源)
    • 相反:可移植性较差(过滤器的操作必须在每个工作场所可用),转换规则可能比较复杂

    我只是向OS/Git询问标签信息。这是我的版本视图(php):

    
    {{$version}
    

    这样,我只在一个地方存储版本

    @Manuel没问题,谢谢你的剧本。我对答案进行了编辑,以使正确的归属更为明显。
    <?php
    $output = [];
    exec("git tag", $output);
    $version = end($output);
    ?>
    {{$version}}