Es gibt einige Feinheiten wegen der Natur von Git. Die Art und Weise, wie ich das gemacht habe, besteht darin, zu kopieren, was die Git-Entwickler selbst machen. Zuerst sollten Sie annotierte Tags verwenden, was wahrscheinlich eine gute Idee ist. Um zu überprüfen, können Sie einen neuen Tag wie folgt erstellen:
$ git tag -a -m "Version 0.2" v0.2 HEAD
Dann (wie in Ottos Beitrag vorgeschlagen) Sie git describe
für ein sinnvolles „Version“ string verwenden können, um die Anzahl der Commits seit dem Tag enthalten wird und die führende Ziffern des sha1 des aktuellen Commits. Hier ist ein Beispiel von einem meiner Projekte:
$ git describe
v1.0-3-gee47184
Das heißt, diese Kopie ist 3 verpflichtet vor dem „v1.0“ Tag und die SHA1 begehen beginnt mit ee47184 (Ich bin nicht sicher, warum sie sind, dass führendes 'g').
Die Git-Entwickler gehen noch einen Schritt weiter und enthalten auch ein zusätzliches Bit, wenn die Arbeitskopie geändert wird (nicht festgeschrieben). Dies erfordert ein paar weitere Schritte, also ist alles in einem Skript verpackt, das sie VERSION-GEN
nennen. Wenn es ausgeführt wird, druckt es die Versionszeichenfolge auf Standardausgabe und erstellt auch eine VERSION-FILE
Datei (das Skript ist vorsichtig, die Datei nicht erneut zu berühren, wenn sich die Version nicht geändert hat - also build-tool-freundlich). Dann können Sie beinhalten, dass VERSION-FILE
Datei in Ihrem Quellcode, Dateien helfen usw.
Mit meinem Beispiel VERSION-GEN
Skript (unten), meine Version Zeichenfolge für das obige Beispiel ist:
$ VERSION-GEN
version: 1.0-3-gee47
Wenn ich ändern jede der nachgeführten Dateien, die er wie folgt aussieht:
$ VERSION-GEN
version: 1.0-3-gee47-mod
Hier ist meine leicht gezwickt Version von VERSION-GEN
. Beachten Sie, dass erwartet wird, dass die Tags, die Versionen markieren, die Form v [0-9] * haben (z. B. v1.0 oder v0.2 oder v12.3.4 oder v12.2-4feb2009 usw.).)
#!/bin/sh
# Tag revisions like this:
# $ git tag -a -m "Version 0.2" v0.2 HEAD
VF=VERSION-FILE
DEFAULT_VERSION=UKNOWN
LF='
'
# First see if there is a version file (included in release tarballs),
# then try git-describe, then default.
if test -d .git -o -f .git &&
VN=$(git describe --abbrev=4 HEAD 2>/dev/null) &&
case "$VN" in
*$LF*) (exit 1) ;;
v[0-9]*)
git update-index -q --refresh
test -z "$(git diff-index --name-only HEAD --)" ||
VN="$VN-mod" ;;
esac
then
continue
#VN=$(echo "$VN" | sed -e 's/-/./g');
else
VN="$DEFAULT_VERSION"
fi
VN=$(expr "$VN" : v*'\(.*\)')
# Show the version to the user via stderr
echo >&2 "version: $VN"
# Parse the existing VERSION-FILE
if test -r $VF
then
VC=$(sed -e 's/^version: //' <$VF)
else
VC=unset
fi
# If version has changed, update VERSION-FILE
test "$VN" = "$VC" || {
echo "version: $VN" >$VF
echo >&2 "($VF updated)"
}
Ich würde hinzufügen "git beschreiben" Ausgang. – Dustin