GitRevisionTool

Gibt Informationen zur aktuellen Git-Revision eines Arbeitsverzeichnisses aus und schreibt sie automatisch zum Erstellen in dein .NET-Projekt.

Archivierter Inhalt: Diese Anwendung ist derzeit inaktiv und möglicherweise veraltet, nicht mehr gewartet oder funktioniert nicht mehr.

Diese Anwendung wurde durch NetRevisionTool ersetzt. NetRevisionTool ist eine Weiterentwicklung von GitRevisionTool und SvnRevisionTool in einem Programm und bietet neue flexible Funktionen.

GitRevisionTool ist ein kleines Entwicklerwerkzeug, das Informationen zur aktuellen Git-Revision eines Arbeitsverzeichnisses ausgibt. Es kann diese Angaben auch direkt in deinen Anwendungsquelltext schreiben, so dass sie gleich mitkompiliert werden. Das funktioniert für .NET-Projektmappen in C# und VB.NET, die die übliche Visual-Studio-Projektstruktur verwenden.

Warum?

Jede etwas größere Anwendung hat eine Versionsnummer, die der Benutzer in einer Form von Über/Info-Dialogfenster abrufen kann. Wenn du häufig neue Versionen veröffentlichst und keine strukturierten Versionsnummern verwalten möchtest (wie die von GitRevisionTool selbst), könntest du einfach die Git-Revisions-ID oder den Commit-Zeitpunkt als Versionsnummer für dein Produkt verwenden. Durch das automatisierte Eintragen dieser Revisions-ID in den Anwendungsquelltext vermeidest du es, das einmal zu vergessen. Außerdem harmoniert die Keyword-Ersetzungsfunktion von Git selbst nicht besonders gut mit C#-/VB.NET-Quelltext, um eine lesbare Versionsangabe für das Assembly zu erzeugen. GitRevisionTool ist für diesen Fall optimiert.

Wie wird es benutzt?

Lad das Programm herunter und kopier es in das Verzeichnis deiner Visual-Studio-Projektmappe. Ich stecke solche kleinen Helferlein gerne in ein Unterverzeichnis „_scripts\bin“ (siehe Screenshot unten), gemeinsam mit dem PowerShell-Build-Framework. Du solltest die Programmdatei ins Git-Repository aufnehmen, um es portabel zu halten. Ein Eintrag wie der folgende in der .gitignore-Datei stellt sicher, dass die Datei nicht ignoriert wird:

!_scripts/bin/

Öffne dann die Projekteigenschaften und geh auf die Seite Buildereignisse (siehe Screenshot unten). Gib die folgende Befehlszeile für das Präbuildereignis ein (in einer Zeile):

if not defined FASTBUILD "$(SolutionDir)\_scripts\bin\GitRevisionTool.exe" -ai "$(ProjectDir)"

Wenn du ein Unterverzeichnis verwendet hast, musst du den Pfad wie im Screenshot anpassen. Dann noch die Befehlszeile für das Postbuildereignis:

if not defined FASTBUILD "$(SolutionDir)\_scripts\bin\GitRevisionTool.exe" -si "$(ProjectDir)"

Wichtig: Das Postbuildereignis muss immer ausgeführt werden, um sicherzustellen, dass die veränderte Quelltextdatei immer richtig wiederhergestellt wird, auch wenn sich das Projekt gerade nicht erstellen lässt.

Die Einschränkung mit der Umgebungsvariable „FASTBUILD“ ermöglicht es, die Ausführung von SvnRevisionTool für jedes einzelne Projekt zu steuern. Für Projektmappen mit vielen (> 25) Projekten kann diese Umgebungsvariable gesetzt werden (auf einen beliebigen nicht-leeren Wert), um die Ausführung von SvnRevisionTool zu unterbinden. Dadurch wird die Builddauer verkürzt. Bei Nutzung des PowerShell-Build-Frameworks wird diese Variable ebenfalls genutzt und SvnRevisionTool im Multi-Projekt-Modus gestartet. Wird diese Eigenschaft nicht benötigt oder gewünscht und das PowerShell-Buildskript nicht genutzt, kann der Teil if not defined FASTBUILD auch weggelassen werden, um sicherzustellen, dass SvnRevisionTool immer verwendet wird.

Öffne jetzt die Datei AssemblyInfo.cs oder .vb, um die Versionsangabe einzurichten. Diese Datei befindet sich normalerweise im Ordner „Properties“ oder „My Project“. Such nach dem AssemblyInformationalVersion-Attribut und füg es hinzu, falls es noch nicht da ist. Hier ein paar Beispiele:

// Einfaches Beispiel:
[assembly: AssemblyInformationalVersion("commit {commit} on {date} {time}")]

// Git-Zeitcode und Commit-Hash (FieldLog, in den Screenshots):
[assembly: AssemblyInformationalVersion("{bmin:2014:4}.{commit:6}{!:+}")]

Die Programmausgabe für den Parameter --help verrät dir alle Details. Es gibt noch weitere Platzhalter, um kompakte, sortierbare Versions-IDs zu erzeugen, die Option, ein unverändertes Arbeitsverzeichnis zu erfordern und andere nützliche Dinge.

Wie tut es das, was es tut?

GitRevisionTool wird im Präbuildereignis mit dem Parameter -a aufgerufen. Das ist jedes Mal beim Erstellen des Projekts, bevor der Compiler loslegt. Es findet deine AssemblyInfo.cs- oder .vb-Datei und ersetzt alle Platzhalter im AssemblyInformationalVersion-Attribut mit den aktuellen Revisionsdaten. Visual Studio verwendet diese Datei dann zum Kompilieren. Zum Schluss wird mit dem Parameter -s die Datei aus der vorher angelegten Sicherungskopie wiederhergestellt, damit du (und Git) keine Veränderungen siehst.

Wichtig: Damit das so funktioniert, darf die AssemblyInfo-Datei während des Erstellens nicht im Visual-Studio-Editor geöffnet sein. Ansonsten werden die Änderungen, die GitRevisionTool in diese Datei schreibt, vom Compiler ignoriert. Wenn du die Versionsangabe änderst und Test-Builds erstellst, musst du diese Datei also immer wieder schließen.

Kompatibilität: .NET Ab Version 2.0 Windows 10 Windows 8 Windows 7 Windows XP Mono 64 bit

Ich habe noch ein ähnliches, älteres Tool, das das gleiche für Subversion-Repositorys macht: SvnRevisionTool

Bilder

Image
GitRevisionTool.exe im bin-Verzeichnis
Image
Build-Ereignisse im Projekt
Image
Versionsangabe in den Dateieigenschaften

Download

GitRevisionTool.exe50 KiBProgrammdatei, Version 1.7.3, .NET 4.0 (Empfohlen für Windows 8/10 sowie alle Projekte mit VS 2010 oder neuer)

GitRevisionTool_NET20.exe49,5 KiBProgrammdatei, Version 1.7.3, .NET 2.0

master.zipAktueller Quelltext direkt von GitHub (GitRevisionTool und SvnRevisionTool)

Es gibt ein öffentliches Git-Repository von GitRevisionTool bei GitHub.

Funktioniert es nicht?

GitRevisionTool erfordert eine Installation von Git für Windows. Es sucht nach bin\git.exe in Verzeichnissen, die es im Uninstaller-Eintrag findet, oder durchsucht dein Programme-Verzeichnis. Wenn es Git nicht findet, kann es dir auch nicht helfen. (Ich habe angefangen, Code zu schreiben, der das .git-Verzeichnis direkt ausliest, wie ich es für .svn gemacht habe, aber für einen ersten Versuch hat sich das als zu kompliziert herausgestellt.) Es sollte ausreichen, einfach msysGit mit den Standardeinstellungen zu installieren. GitHub hat eine nette Dokumentation darüber.

GitRevisionTool kann nur C#- und VB.NET-Projektdateien verarbeiten. Für andere Projekttypen wird es nur die Revisionsinformationen ausgeben (dafür aber so formatiert, wie du es willst). Du brauchst vielleicht ein eigenes CMD-Skript, um Dateien zu verändern. Setz die Formatangabe auf etwas wie SET revid={commit}, leite die Ausgabe in eine temporäre Batchdatei um (die muss außerhalb des Arbeitsverzeichnisses liegen, oder die Arbeitskopie wird immer als verändert gekennzeichnet!), ruf diese Datei auf und bearbeite deine Dateien unter Verwendung der Umgebungsvariable %revid% mit sed oder einem anderen Tool. Du solltest diese Datei ggf. entsprechend sichern und wiederherstellen.

Dies ist selbst eine .NET-Anwendung. Sie ist für das .NET-Framework 2.0 erstellt, du solltest also keine Probleme unter Windows Vista oder neuer haben. Wenn du Visual Studio 2005 oder neuer verwendest, hast du das .NET-Framework sowieso bereits installiert.

Änderungen

2015Jan26
Version 1.7.3
  • Added separate .NET 4.0 build, recommended for Windows 8/10 or all VS 2010+ projects
  • Reorganised AssemblyInfo.cs
2014Mai2
Version 1.7.2
  • Fixed PATH parsing for quoted entries
2014Mrz8
Version 1.7.1
  • Added icon
2014Mrz4
Version 1.7
  • Added support for Linux system environments
  • Also searching Git executable in the PATH environment variable
  • Updated help message
2014Jan12
Version 1.6
  • Added base28 version format as new bmin, renamed base36 format to b36min
2013Nov28
Version 1.5.1
  • Ignoring projects on restore if there is nothing to restore
2013Mai23
Version 1.5
  • Added multi-project mode
2012Nov26
Version 1.4
  • Added {bmin} base36 format with 10-minute intervals for higher compression of the time values (4 bmin digits are good for 30 years, would need 6 digits with xmin)
  • Added {ut...} variants for commit/build date/time formats in UTC instead of local time
  • Added command line options to decode xmin and bmin values to a readable time (UTC and local)
  • Added command line option to check the current and upcoming bmin values (in case the text is unwanted)
  • Fixed {xmin} and {bmin} time zone handling, it is now using UTC
2012Sep7
Version 1.3
  • Added {builddate} and {buildtime} placeholders
2012Mai6
Version 1.2.2
  • Fixed {commit} format length parsing to allow 1-4 as value
2012Jan31
Version 1.2.1
  • Be silent with the --ignore-missing parameter set to avoid VS build errors
2012Jan30
Version 1.2
  • Added parameter --ignore-missing to ignore missing Git binary or working directory
  • Made the path parameter actually work again (was ignored before)
  • Kind of fixed {xmin} output for negative values (giving minus-prefixed values now)
2012Jan28
Version 1.1
  • Git binary is first searched in the location from the uninstaller registry key
  • New format option {xmin} for compressed high-resolution times
2012Jan4
Version 1.0.1
  • Git binary is searched in several directories (%ProgramFiles*%\Git*\bin\git.exe)
2011Dez14
Version 1.0
  • Created GitRevisionTool based on SvnRevisionTool, using installed msysGit

Lizenz und Nutzungsbedingungen

Diese Software wird unter den Bedingungen der GNU-GPL-Lizenz Version 3 veröffentlicht. Die genauen Lizenzbedingungen befinden sich im Download oder auf der GNU-Website.

Statistische Daten

  • Erstellt am 2011-12-14, aktualisiert am 2015-01-26.
  • Ca. 890 Codezeilen, geschätzte Ent­wick­lungs­kos­ten: 890 - 3 600 €