java - 使用 Hudson 构建时保存 Git SHA1 类似于 CVS 的 CVS_BRANCH 标签

标签 java git ant hudson

我们已经从 CVS 迁移到 Git。我们的 Hudson 构建脚本用于在生成的构建中保存 CVS_BRANCH 环境变量的值以及 Hudson BUILD_ID 以供以后调查。

我无法弄清楚 Hudson(或 Git 插件)如何将当前提交的 Git SHA1 名称呈现给 ant 脚本,因为我找不到任何明确的来源说明我应该查看的位置。

如果环境中存在它,我宁愿不调用 git 来获取它,但如果有必要,我可以这样做。

我错过了什么?

最佳答案

好吧,如果你真的想避免调用 git 命令(git describegit rev-parse),那么你可以执行以下操作:

  1. 查找 $GIT_DIR/HEAD 文件。如果它是符号链接(symbolic link),它的目标是当前分支的完全限定名称(例如,如果当前分支是“master”,则为“refs/heads/master”);除非在非常古老的 git 管理的非常古老的存储库中,否则不应该发生。

    如果是普通文件,则为ref: refs/heads/<branch>两种形式之一(所谓的 symref),或者它包含当前提交的 SHA-1 id(所谓的“分离的 HEAD”又名。匿名分支:git branch 输出中的'(无分支)'。

  2. 当前提交在 $GIT_DIR/refs/head/branch 文件中,或者可以在 $GIT_DIR/packed-refs 文件中找到。如果两者都存在,则 loose ref(在以完全限定的分支名称命名的单独文件中)获胜。

但我不确定是否值得。

关于java - 使用 Hudson 构建时保存 Git SHA1 类似于 CVS 的 CVS_BRANCH 标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3922541/

相关文章:

java - 为什么在syncedList()或Vector已经同步的情况下,为什么我们仍然需要外部同步?

java - android.annotation 无法解析

java - 将值从 Servlet 传递到我的 JSP

java - Jackson:一个类有两种不同的表示

gitosis 没有自动生成 projects.list,gitweb 无法工作

Git 将一个分支 merge 到另一个分支是双向 merge 吗?

git - 如何访问公共(public) fork 的 GitLens+ 功能?

ant - 如何将文件集中的所有文件添加为 exec 任务的参数?

java - Ant 和类路径

使用 GnuPG 的 Apache/Tomcat 和 Ant 验证