힘내네의 특성으로 인해 약간의 미묘한 점이 있습니다. 내가 한 일은 힘내 개발자들이하는 일을 복사하는 것이다. 먼저 어쨌든 좋은 아이디어 인 주석 태그를 사용하는 것이 좋습니다. (오토의 게시물에 제안) 당신이 태그와 이후 커밋의 수를 포함하는 유용한 "버전"문자열을 git describe
을 사용할 수 있습니다 그리고
$ git tag -a -m "Version 0.2" v0.2 HEAD
: 검토하려면이 같은 새 태그를 만들 수 있습니다 현재 커밋의 sha1의 앞자리 숫자.
입니다
$ git describe
v1.0-3-gee47184
,이 사본 3은 "V1.0"태그 앞서 커밋과 SHA1을 커밋이 ee47184 시작 (나는 그들이 것을 포함하는 이유는 확실하지 않다 : 여기 내 프로젝트 중 하나의 예입니다 선도 'g').
힘내 개발자는 한 단계 더 나아가 작업 복사본이 수정 (커밋되지 않은 경우)하는 경우 추가 비트를 포함합니다. 이렇게하려면 몇 단계가 더 필요하므로 스크립트 이름이 모두 VERSION-GEN
입니다. 이 파일을 실행하면 버전 문자열이 표준 출력에 인쇄되고 VERSION-FILE
파일이 생성됩니다 (버전이 변경되지 않았 으면 스크립트가 해당 파일을 다시 터치하지 않도록 조심해야하므로 빌드 도구 사용 용이). 그런 다음 소스 코드에서 VERSION-FILE
파일, 내 예를 VERSION-GEN
스크립트 (아래) 사용 등
, 파일을 도울 것을 포함 할 수 위의 예를 들어 내 버전 문자열은 다음과 같습니다
$ VERSION-GEN
version: 1.0-3-gee47
내가 수정하는 경우 그것은 다음과 같습니다 추적 파일 중 하나를
$ VERSION-GEN
version: 1.0-3-gee47-mod
여기 VERSION-GEN
내 약간 불통 버전입니다. 버전을 표시하는 태그는 v [0-9] * 형식이어야합니다 (예 : v1.0 또는 v0.2 또는 v12.3.4 또는 v12.2-4feb2009 등).)
#!/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)"
}
"git describe"출력을 추가합니다. – Dustin