55 votes

Comment rechercher le dernier hachage git commit à partir d'un script de construction ant

Comment puis-je recherche de la dernière git commit de hachage à partir d'un script ant?

Je suis actuellement en train de travailler sur un nouveau projet open source qui je stocker sur github. Je tiens à exprimer mon fichier ANT pour me permettre de créer numérotés construit. Je m'imagine que je voudrais lancer le build avec quelque chose comme "ant buildnum -Dnum=12".

Je voudrais la résultante de pot d'avoir deux bits d'information dans le fichier de manifeste:

  • construire.nombre=12
  • construire.gitcommit=

Je sais comment créer le construire.numéro de ligne. Cependant, je ne suis pas sûr de la meilleure fourmi de plomberie à la recherche de la dernière git commit de hachage qui est la valeur que je veux remplacer .

82voto

jmuc Points 642

J'ai écrit cette cible ant pour un projet sur github. Utilisation:

  • magasins de version dans la propriété "référentiel.la version"
  • fonctionne si aucune git est installé ou pas .répertoire git est présent (de secours)
  • d'autres cibles doivent dépendre de cette cible s'ils ont besoin de la version git
  • une seule commande git est exécuté (--toujours)

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

Il, par exemple, être utilisé pour étendre le jeton @repository.version@ dans un fichier de modèle:

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

22voto

Cette commande retourne toujours le dernier commit SHA1 du dossier de travail, utile lorsque vous ne construisez pas toujours à partir de HEAD.

Sous Windows avec msysgit:

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

Sous unix:

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

8voto

Olivier Verdier Points 12332

Est-ce que c'est ce que vous cherchez?

 git rev-parse HEAD
 

4voto

mchr Points 2347

J'ai effectivement utilisé les deux réponses. Le code de fourmi que j'ai écrit était comme suit.

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

2voto

Hunternif Points 395

J'ai écrit une tâche Ant pour déterminer la version de build sans appeler explicitement la commande Git, de sorte que je n'ai pas besoin de l'avoir installé (sur Windows j'avais aussi besoin de l'inclure dans PATH). La gestion des versions de flux de travail:

  • Tout un "jalon" des changements de version (c'est à dire d'abord 2 ou 3 chiffres) sont définies manuellement par l'intermédiaire de balises sur la branche master.
  • Chaque validation ultérieure à la balise ajoute le numéro de build. (Uniquement pour les tags sur master.)
  • Si la construction à partir d'une direction distincte, son nom devrait être inclus dans la version.

Code Source et des exemples: https://github.com/Hunternif/JGitVersion

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X