Ci sono alcune sottigliezze a questo a causa della natura di Git. Il modo in cui l'ho fatto è copiando ciò che fanno gli sviluppatori Git. Innanzitutto, ti consigliamo di utilizzare tag annotati, che probabilmente sono comunque una buona idea. Per rivedere, è possibile creare un nuovo tag come questo:
$ git tag -a -m "Version 0.2" v0.2 HEAD
Poi (come suggerito nel post di Otto) è possibile utilizzare git describe
per un utile "versione" stringa che includerà il numero di commit da quando il tag e il cifre iniziali dello sha1 del commit corrente. Ecco un esempio di uno dei miei progetti:
$ git describe
v1.0-3-gee47184
Cioè, questo copia è 3 impegna davanti al tag "v1.0" e il commit SHA1 inizia con ee47184 (io non sono sicuro perché essi comprendono che portando 'g').
Gli sviluppatori Git fanno un ulteriore passo avanti e includono anche un ulteriore bit se la copia di lavoro viene modificata (senza commit). Ciò richiede alcuni altri passaggi, quindi è tutto racchiuso in uno script che chiamano VERSION-GEN
. Quando viene eseguito, stampa la stringa di versione sullo standard output e crea anche un file VERSION-FILE
(lo script fa attenzione a non ri-toccherà quel file se la versione non è cambiata, quindi è compatibile con gli strumenti di costruzione). Quindi, è possibile includere il file che VERSION-FILE
nel codice sorgente, file di aiuto, ecc
Usando il mio esempio VERSION-GEN
sceneggiatura (qui di seguito), la mia stringa di versione per l'esempio di cui sopra è:
$ VERSION-GEN
version: 1.0-3-gee47
Se modifico uno qualsiasi dei file monitorati Ecco come si presenta:
$ VERSION-GEN
version: 1.0-3-gee47-mod
Ecco la mia versione leggermente modificato di VERSION-GEN
. Si noti che si aspetta che i tag che contrassegnano le versioni abbiano la forma v [0-9] * (ad es., V1.0 o v0.2 o v12.3.4 o v12.2-4feb2009 ecc.)
#!/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)"
}
Aggiungerei l'output "git describe". – Dustin