Как найти последний хэш git commit из скрипта сборки ant - PullRequest
54 голосов
/ 04 июня 2010

Как найти последний хэш git commit из скрипта сборки ant?

В настоящее время я работаю над новым проектом с открытым исходным кодом, который я храню на github. Я хотел бы расширить свой существующий файл сборки ANT, чтобы позволить мне создавать нумерованные сборки. Я предполагаю, что я бы запустил сборку с чем-то вроде "ant buildnum -Dnum = 12".

Мне бы хотелось, чтобы в полученном банке было два важных бита информации в файле манифеста:

  • build.number = 12
  • build.gitcommit =

Я знаю, как создать строку build.number. Тем не менее, я не уверен в том, что лучший муравейник для поиска последнего хита git commit - это значение, которое я хочу заполнить.

Ответы [ 7 ]

81 голосов
/ 30 октября 2010

Я написал следующую цель муравья для проекта на github. Использование:

  • сохраняет версию в свойстве "repository.version"
  • работает, если git не установлен или отсутствует каталог .git (резервный)
  • другие цели должны зависеть от этой цели, если им нужна версия git
  • выполняется только одна команда git (--always)

<available file=".git" type="dir" property="git.present"/>

<target name="git.revision" description="Store git revision in ${repository.version}" if="git.present">
    <exec executable="git" outputproperty="git.revision" failifexecutionfails="false" errorproperty="">
        <arg value="describe"/>
        <arg value="--tags"/>
        <arg value="--always"/>
        <arg value="HEAD"/>
    </exec>
    <condition property="repository.version" value="${git.revision}" else="unknown">
        <and>
            <isset property="git.revision"/>
            <length string="${git.revision}" trim="yes" length="0" when="greater"/>
        </and>
    </condition>
</target>

Это, например, использоваться для расширения токена @repository.version@ в файле шаблона:

<target name="index.html" depends="git.revision" description="build index.html from template">
    <copy file="index.html.template" tofile="index.html" overwrite="yes">
        <filterchain>
            <replacetokens>
                <token key="repository.version" value="${repository.version}" />
            </replacetokens>
        </filterchain>
    </copy>
</target>
21 голосов
/ 28 июля 2010

Эта команда всегда возвращает последний коммит SHA1 рабочей папки, что полезно, если вы не всегда строите из HEAD. Команда должна выполняться как в Windows, так и в * nix системах

<exec executable="git" outputproperty="git.revision">
    <arg value="log" />
    <arg value="-1" />
    <arg value="--pretty=format:%H" />
</exec>
8 голосов
/ 04 июня 2010

Это то, что вы ищете?

git rev-parse HEAD
4 голосов
/ 15 июня 2010

Я фактически использовал оба ответа. Код муравья, который я написал, был следующим.

  <target name="getgitdetails" >
    <exec executable="git" outputproperty="git.tagstring">
      <arg value="describe"/>
    </exec>
    <exec executable="git" outputproperty="git.revision">
      <arg value="rev-parse"/>
      <arg value="HEAD"/>
    </exec>
    <if>
      <contains string="${git.tagstring}" substring="cannot"/>
      <then>
        <property name="git.tag" value="none"/>
      </then>
      <else>
        <property name="git.tag" value="${git.tagstring}"/>
      </else>
    </if>
  </target>

2 голосов
/ 27 октября 2013

Я написал задачу Ant для определения версии сборки без явного вызова команды Git, чтобы мне не нужно было ее устанавливать (в Windows мне также нужно было бы включить ее в PATH). Рабочий процесс управления версиями:

  • Любые изменения версии "вехой" (то есть первые 2 или 3 числа) устанавливаются вручную с помощью тегов на ветви master.
  • Каждый коммит, следующий за тегом, добавляет номер сборки. (Только для тегов на master.)
  • При сборке из отдельной ветки ее имя должно быть включено в версию.

Исходный код и примеры: https://github.com/Hunternif/JGitVersion

1 голос
/ 04 июня 2010

Вам следует пометить версию (начиная с 0.1 или аналогичной), а затем просто использовать git describe.

Это даст вам читаемые уникальные идентификаторы в качестве опорных точек из вашего тега. Когда вы отпустите, этот номер версии будет таким, каким вы его указали.

0 голосов
/ 04 октября 2016

В большой компании, которую я обнаружил, <exec> git command-line быстро столкнулся с проблемами, некоторые разработчики использовали графический интерфейс, некоторые имели разные версии командной строки, установленные в разных местах, другие имели другие проблемы. Я понял, что путь к этому - это чистое Java-решение с зависимостями, являющимися частью системы сборки проекта, так же, как мы использовали ранее в Svnkit для Subversion.

Одним условием было то, что разрешались только зависимости от основной библиотеки. Мы могли бы использовать библиотеку JGit, но многие задачи git ant проектов, разбросанных по github и т.п., были исключены.

Решением было использование комбинации из build.xml и библиотеки JGit.

TODO: вставить код ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...