【问题标题】:How can I get the current git branch in gradle?如何在 gradle 中获取当前的 git 分支?
【发布时间】:2013-02-10 06:15:21
【问题描述】:

我正在编写一个任务来将我的应用程序部署到服务器。但是,我希望仅当我当前的 git 分支是主分支时才运行此任务。 如何获取当前的 git 分支?

gradle-git方法:

我知道在任务GitBranchList 下有一个gradle-git plugin 有一个方法getWorkingBranch(),但是任何时候我都尝试执行

task getBranchName(type: GitBranchList) {
   print getWorkingBranch().name
}

我收到“任务尚未执行”错误。我查看了source,当没有设置分支时它会抛出该错误。这是否意味着这种方法并不像我认为的那样做?我需要在某个地方设置分支吗?

【问题讨论】:

    标签: git gradle


    【解决方案1】:

    您也可以在没有插件的情况下获得git branch name

    def gitBranch() {
        def branch = ""
        def proc = "git rev-parse --abbrev-ref HEAD".execute()
        proc.in.eachLine { line -> branch = line }
        proc.err.eachLine { line -> println line }
        proc.waitFor()
        branch
    }
    

    参考:Gradle & GIT : How to map your branch to a deployment profile

    【讨论】:

    • 也许这是给定的,但应该注意的是,许多 CI 引擎以分离状态检出最新提交,而不是 master 或命名分支。在这种情况下,此解决方案将返回 HEAD,而不是分支名称。
    【解决方案2】:

    不,这并不意味着没有设置分支。这意味着该任务还没有真正执行。您要做的是在配置闭包中调用一个方法,而您可能希望在任务执行后调用它。尝试将您的任务更改为:

    task getBranchName(type: GitBranchList) << {
        print getWorkingBranch().name
    }
    

    使用&lt;&lt;,您正在添加一个doLast,它将在任务执行后执行。

    【讨论】:

      【解决方案3】:

      这基本上是@Song Bi 的答案,但在 kotlin DSL 中(受此线程 here 启发):

      import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
      import java.io.ByteArrayOutputStream
      
      
      /**
       * Utility function to retrieve the name of the current git branch.
       * Will not work if build tool detaches head after checkout, which some do!
       */
      fun gitBranch(): String {
          return try {
              val byteOut = ByteArrayOutputStream()
              project.exec {
                  commandLine = "git rev-parse --abbrev-ref HEAD".split(" ")
                  standardOutput = byteOut
              }
              String(byteOut.toByteArray()).trim().also {
                  if (it == "HEAD")
                      logger.warn("Unable to determine current branch: Project is checked out with detached head!")
              }
          } catch (e: Exception) {
              logger.warn("Unable to determine current branch: ${e.message}")
              "Unknown Branch"
          }
      }
      

      【讨论】:

        猜你喜欢
        • 2011-09-08
        • 2023-03-09
        • 2011-01-15
        • 1970-01-01
        • 2011-12-25
        • 2018-01-25
        • 2013-09-10
        • 2018-03-12
        相关资源
        最近更新 更多