git - 使用 GIT 存储库 (MAJOR.MINOR.COMMIT_NUMBER) 对软件版本进行版本控制的最佳方法是什么?
问题描述
我正在使用 Jenkins 运行构建和运行测试。我正在从 SVN 迁移到 Git。目前,我使用 MAJOR.MINOR.SVN_REVISION 格式的版本软件。
例如,MAJOR 和 MINOR 来自 Java 项目和库的 pom.xml
...
<groupId>com.example.ci</groupId>
<artifactId>test-java-project</artifactId>
<version>2.1</version>
<packaging>jar</packaging>
...
构建 Java 应用程序/软件时,我将 SVN 修订版添加到版本中。例如,如果构建的 SVN 版本是 123,那么完整版本将是 2.1.123。这很好用。
我不能对 Git 使用相同的逻辑,因为 Git 提交号是一个哈希号,它不是连续的。例如:2.1.a126ac21090
当我需要使用版本号识别最新的库和应用程序时,这将导致问题。
第一个选项是使用 Jenkins 内部版本号 (MAJOR.MINOR.JENKINS_BUILD_NUMBER) 但这也有一些缺点,例如让生产和暂存 Jenkins 为两个不同的工件生成相同的版本号。
第二个选项是使用“git rev-list --count”,但这可能会为两个不同的功能分支返回相同的数字,我最终可能会得到两个具有相同版本号的不同工件。
是否有另一种更好的方法来使用 Git 对类似于 MAJOR.MINOR.SVN_REVISION 的软件进行版本控制?
解决方案
你仍然可以保留你的标签,但也可以生成一个带有 Git 修订 ID 的属性文件。
请参阅git-commit-id/maven-git-commit-id-plugin
将自动化该过程的 Maven 插件的示例。
请参阅Maven 中心。
Maven 插件,它将构建时 git 存储库信息包含在 POJO /
*.properties
中。
让您的应用程序告诉您它们是从哪个版本构建的!
推荐阅读
- security - 使用 esp-idf 在 esp32 上安全启动和闪存加密
- reactjs - 在 React 中 hotreload 究竟是如何工作的?
- flutter - 初始 orderBy() 字段“[[FieldPath([id]), true]][0][0]”必须与 where() 字段参数相同
- javascript - 如何获取元素已经“显示”并且不需要在列表中滚动的信息(el.scoolingIntoView)?
- docker - 运行容器时找不到文件错误
- c++ - 如何确保 range1 小于 range2?
- python - 为什么我不能从动态网页中抓取表格
- firebase - 如何在 Firestore Flutter 中按字段内容对文档进行排序
- typescript - 为什么我们在处理 vue 组件时会丢失 typescript 类型检查?
- reactjs - react-phone-input-2 与 react-hook-form