在 Ant 构建脚本期间确定 Git 存储库是否干净

Determine if Git repo is clean during Ant build script

我在我的 Ant 构建脚本中集成了一些过滤器链,它在打包时将构建日期、程序版本和 git head sha 添加到源文件中,但是我不确定如何确定源回购是 "clean",如果自从当前要构建的源中的 HEAD 提交以来没有任何更改。

为了标记 HEAD 提交,我使用了这个问题中的 git.revision 目标:How to lookup the latest git commit hash from an ant build script

我想做类似的事情,但要指明回购状态,即。 "SOURCE: @STATUS@" 将过滤为:"SOURCE: CLEAN" / "SOURCE: DIRTY",或类似的。

只是 运行 来自 ant returns 的 exec 中的 git status 命令有很多东西并且使它更难使用。有没有更简单的方法?

我解决这个问题的首选方法是永远不要更改我的任何一个源文件(在版本控制下)。相反,ANT 创建了一个 "build" 或 "target" 目录,该目录被添加到“.gitignore”文件中,因此 git 不关心其内容。

├── build.xml
├── .gitignore
├── src
│   ├── main
│   │   ├── java
│   │   └── resources
│   └── test
│       └── java
└── build
    ├── classes
    ├── jars
    └── resources

这种方式的优点是:

  1. 构建生成的任何文件都将被 git
  2. 忽略
  3. 在 ANT 中创建一个 "clean" 目标来刷新工作区很简单。

我的标准示例 "clean" 目标

<target name="clean">
  <deleted dir="build"/>
</target>

为确保干净的构建,请运行以下命令

ant clean build

最后,如果您使用的是像 Jenkins 这样的 CI 服务器(我强烈建议您这样做),通常会有插件支持,例如:

提供删除整个项目工作区或选定文件的功能。

希望对您有所帮助。