web-dev-qa-db-ja.com

Antビルドスクリプトから最新のgit commitハッシュを検索する方法

Antビルドスクリプトから最新のgit commitハッシュを検索するにはどうすればよいですか?

私は現在、githubに保存する新しいオープンソースプロジェクトに取り組んでいます。既存のANTビルドファイルを拡張して、番号付きビルドを作成できるようにしたいと思います。 「ant buildnum -Dnum = 12」のようなものでビルドを起動すると想像しています。

結果のjarのマニフェストファイルに2つの重要な情報が含まれるようにしたいと思います。

  • build.number = 12
  • build.gitcommit =

私はbuild.number行を作成する方法を知っています。ただし、最新のgit commit hashを検索するのに最適なant plumbはわかりません。これは、入力したい値です。

55
mchr

私はgithub上のプロジェクトに次のantターゲットを書きました。使用法:

  • プロパティ「repository.version」にバージョンを保存します
  • gitがインストールされていない場合、または.gitディレクトリが存在しない場合に機能します(フォールバック)
  • 他のターゲットは、gitバージョンが必要な場合、このターゲットに依存する必要があります
  • 実行されるgitコマンドは1つだけです(--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>
82
jmuc

このコマンドは常に作業フォルダーの最後のコミットSHA1を返します。常にHEADからビルドしない場合に役立ちます。コマンドは、Windowsシステムと* nixシステムの両方で実行する必要があります

<exec executable="git" outputproperty="git.revision">
    <arg value="log" />
    <arg value="-1" />
    <arg value="--pretty=format:%H" />
</exec>
22

それがあなたが探しているものでしょうか?

git rev-parse HEAD
8
Olivier Verdier

実際に両方の答えを使用しました。私が書いたアリのコードは次のとおりです。

  <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>
4
mchr

私は、Gitコマンドを明示的に呼び出さずにビルドバージョンを判別するAntタスクを作成したので、インストールする必要はありません(WindowsではPATHにも含める必要があります)。バージョン管理ワークフロー:

  • 「マイルストーン」バージョンの変更(つまり、最初の2つまたは3つの番号)は、ブランチmasterのタグを介して手動で設定されます。
  • タグに続く各コミットはビルド番号に追加されます。 (masterのタグのみ。)
  • 別のブランチからビルドする場合は、その名前をバージョンに含める必要があります。

ソースコードと例: https://github.com/Hunternif/JGitVersion

2
Hunternif

バージョンにタグを付ける (0.1かそれと似たものから開始)してから、git describe

これにより、タグからの参照ポイントとして、読み取り可能な一意の識別子が得られます。リリースすると、このバージョン番号は指定したものになります。

1
Dustin

大企業で<exec> git command-lineがすぐに問題にぶつかることに気づきました。GUIを使用している開発者もいれば、異なる場所に異なるコマンドラインバージョンがインストールされていたり、他の問題が発生したりしていました。行く方法は純粋なJavaソリューションであり、依存関係はプロジェクトビルドシステムの一部であることがわかりました。これまで、Svnkit for Subversionで使用していたのと同じです。

1つの条件は、「主流」のライブラリ依存関係のみが許可されていることでした。 JGitライブラリを使用することもできますが、githubなどに散在する多くのgit ant tasksプロジェクトは除外されました。

解決策は、build.xml内とJGitライブラリ内の組み合わせを使用することでした。

TODO:コードを貼り付け...

0
Ed Randall