Как найти последний хэш-код git commit из ant build script
Как я могу найти последний хэш-код git commit из ant build script?
В настоящее время я работаю над новым проектом с открытым исходным кодом, который я храню на github. Я хотел бы расширить существующий файл сборки ant, чтобы я мог создавать пронумерованные сборки. Я предполагаю, что я запустил сборку с чем-то вроде "ant buildnum -Dnum = 12".
Я хочу, чтобы в полученном банке было два важных бита информации в файле манифеста:
- build.number = 12
- build.gitcommit =
Я знаю, как создать строку build.number. Тем не менее, я не уверен в лучшем ant сантехнике, чтобы найти последний хеш-код фиксации git, который является значением, которое я хочу заполнить для.
Ответы
Ответ 1
Я написал следующий ant целевой проект для github. Использование:
- хранит версию в свойстве "repository.version"
- работает, если не установлен git или отсутствует каталог .git(резервный)
- другие цели должны зависеть от этой цели, если им нужна версия git
- выполняется только одна команда git (- всегда)
<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>
Это, например, для расширения токена @[email protected]
в файле шаблона:
<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>
Ответ 2
Эта команда возвращает всегда рабочую папку last commit SHA1, полезную, когда вы не всегда строите из HEAD. Команда должна запускаться как в системах Windows, так и в системах * nix
<exec executable="git" outputproperty="git.revision">
<arg value="log" />
<arg value="-1" />
<arg value="--pretty=format:%H" />
</exec>
Ответ 3
Будет ли это то, что вы ищете?
git rev-parse HEAD
Ответ 4
Я действительно использовал оба ответа. Код ant, который я написал, был следующим.
<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>
Ответ 5
Я написал задачу Ant для определения версии сборки без явного вызова команды Git, поэтому мне не нужно ее устанавливать (в Windows мне также необходимо включить ее в PATH
)., Рабочий процесс версии:
- Любые изменения версии "вехой" (т.е. первые 2 или 3 числа) устанавливаются вручную через теги на ветке
master
.
- Каждая фиксация, следующая за тегом, добавляет номер сборки. (Только для тегов на
master
.)
- Если вы создаете отдельный филиал, его имя должно быть включено в версию.
Исходный код и примеры: https://github.com/Hunternif/JGitVersion
Ответ 6
Вы должны пометить версию (начиная с 0,1 или аналогичного), а затем просто использовать git describe
.
Это даст вам читаемые уникальные идентификаторы в качестве контрольных точек из вашего тега. Когда вы отпустите, этот номер версии будет таким, каким вы его указали.
Ответ 7
В большой компании я обнаружил, что <exec> git command-line
быстро столкнулся с проблемами, некоторые разработчики использовали графический интерфейс, у некоторых были разные версии командной строки, установленные в разных местах, у некоторых были другие проблемы. Я понял, что путь - это чисто Java-решение с зависимостями, входящими в систему построения проекта, как мы уже использовали ранее с Svnkit for Subversion.
Одно из условий заключалось в том, что разрешены только "основные" библиотеки. Мы могли бы использовать библиотеку JGit, но многие проекты задач git ant, разбросанные по github и т.п., Были исключены.
Решение заключалось в использовании комбинации внутри библиотеки build.xml и JGit.
TODO: вставить код...