2010-12-02 5 views
2

Ich würde gerne wissen, ob es eine Möglichkeit gibt, ein Changeset automatisch zu taggen, da es lokal festgeschrieben oder in das Brennofen-Repository verschoben wird.Automatisches Tag Changesets beim Commit oder Pushed in den Brennofen

Ich möchte, dass jeder Änderungssatz ein Tag mit Version/Build-Nummer hat. Ich plane, meine Versions-/Build-Nummern in einer Datenbank zu speichern und möchte, dass ein Skript diesen Wert aus der Datenbank abruft und ein Tag zum Änderungssatz hinzufügt. Ist es möglich, ein Skript automatisch als Post-Commit-Ereignis oder als Post-Push-Ereignis aufzurufen, wenn es in das Brennofen-Repository verschoben wird?

Ich bin auch offen für alle anderen Ansätze, um automatisches Tagging bei jedem Commit/Push zu erreichen.

+0

Auch auf dem Kiln Stack: http://kiln.stackexchange.com/questions/2602/automatically-tag-changesets -When-Commit-oder-Push-to-Brennofen – tghw

Antwort

8

Anstatt einen Tag für jedes changeset zu schaffen, warum nicht versuchen, eine der folgenden Möglichkeiten:

  • Verwenden Sie den changeset Hash als Kennung?
  • Verwenden Sie eine Zeichenfolge aus dem Protokoll als Ihre Kennung (siehe unten)?

    hg log -r 1.7.2 --template '{latesttag}-{latesttagdistance}-{node}\n' 
    

    Das Ergebnis hat die Form:

    <latest tag>-<# changesets since latest tag>-<changeset hash> 
    

    Zum Beispiel auf meinem lokalen Klon des Mercurial Repo

Eine beschreibende String kann aus dem Protokoll mit diesem Befehl erzeugt werden , dies erzeugt:

1.7.2-2-5e51254ad4d4c80669f462e310b2677f2b3c54a7 

Welche sagt mir dass seit Tag 1.7.2 zwei Commits stattgefunden haben und der aktuelle Changeset-Hash 5e51254a ist.

In Mercurial erstellt jedes Tag einen neuen Änderungssatz. Wenn Sie also jedes Commit markieren, verdoppeln Sie die Anzahl der Changesets im Repo. Sie sollten die integrierten Tools (wie oben beschrieben) verwenden, anstatt zu versuchen, das Rad neu zu erstellen.

+0

+1 interessante Ansatz! Ich würde '{short}' anstelle von '{node}' verwenden, um die Länge des Versions-Deskriptors überschaubar zu halten. –

+0

hg log -r Tipp ... ist wahrscheinlich besser. {short} scheint in 1.4.3 leider nicht zu funktionieren –

1

Ich würde gerne wissen, ob es eine Möglichkeit gibt, einen Changeset automatisch zu markieren, da er lokal festgeschrieben wird oder wenn er in das Brennofen-Repository geschoben wird.

Sie könnten immer einen Post-Commit-Hook schreiben, um das zu tun.

Ich möchte, dass jeder Änderungssatz ein Tag mit Version/Build-Nummer hat.

Tags sind nützlich, um wichtige Momente in Ihrer Commit-Historie zu identifizieren. Geben Sie diesen Momenten einen aussagekräftigen Namen, der sich auf die Produktentwicklung bezieht, wie Release 1.0, Release 1.3 usw.

Wenn Sie jeden Änderungssatz markieren würden, würden Sie nur den Geräuschpegel erhöhen. Sie müssen weiterhin Informationen über wichtige Tags aufbewahren.

Betrachten Sie das Tag als Metainformation über Änderungsmengen. Nicht alle verdienen die gleiche Bedeutung. Nicht alle von ihnen benötigen diese Meta-Informationen.

Wenn Sie Tags betrachten, erhalten Sie nur dann eine aussagekräftige Historie, wenn Sie sie sparsam verwenden.

Am Haken

See:

Beispiel: Führen Sie nac r Eine Änderungsgruppe wurde per Push, Pull oder Unbundle hinzugefügt. Ich habe es verwendet, um automatische Builds auszulösen.

[hooks] 
changegroup.yyyy = command 

Ebenso gibt es post-commit, post-Push-Haken

[hooks] 
post-<command> = command 
Verwandte Themen