2009-02-05 3 views
17

오픈 소스 정적 자바 스크립트 + HTML 응용 프로그램은 내 로컬 컴퓨터, 내부 서버 및 안정적인 외부 서버에 각각 약 3 개의 다른 장소에 배포되었습니다.Git 프로젝트의 파일에 현재 커밋 ID를 어떻게 포함 시키시겠습니까?

어떤 버전이 어떤 장소에 배포되어 있는지 즉시 알려주고 버그 신고 기자가 버그를보고하는 버전에 쉽게 액세스 할 수 있기를 바랍니다.

이상적으로 커밋 프로세스의 일부로 커밋의 해시로 파일을 작성하고 싶습니다. 물론, 힘내 파일의 일부로 계산 된 해시를 포함 시키면 커밋의 계산 된 해시가 변경되므로 힘내 니스에서 알 수있는 것은 불가능합니다.

반면에 빌드 프로세스의 일부로이 빌드를 통합 할 수 있습니다. 현재 빌드 프로세스가 없습니다. 가능한 경우 단계를 추가하지 않는 것이 좋습니다.

가장 확실한 방법은 무엇입니까?

답변

6

자동 배포 시스템에 추가하십시오.

배포가 자동화되지 않은 경우 자동화 한 다음 거기에 추가하십시오. 그런 다음 단계를 제거했습니다.

"z 저장소에서 x 시간에 x 날짜에 배포되었습니다."보다 유용하게 만듭니다. 커밋의 해시는 개발자가 아닌 개발자에게 큰 의미가 없습니다.

+5

"git describe"출력을 추가합니다. – Dustin

29

힘내네의 특성으로 인해 약간의 미묘한 점이 있습니다. 내가 한 일은 힘내 개발자들이하는 일을 복사하는 것이다. 먼저 어쨌든 좋은 아이디어 인 주석 태그를 사용하는 것이 좋습니다. (오토의 게시물에 제안) 당신이 태그와 이후 커밋의 수를 포함하는 유용한 "버전"문자열을 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)" 
} 
+0

스크립트 끝에는 몇 가지 오타가 있습니다. VC = $ :로 지난 3 개 라인을 교체 (나오지도 -e '의/^ 버전 : //'$ VF) > & 2 "(VF 업데이트 $)" Fi를 주 닫는 ')'에코 마지막 '}'을 fi로 바꿉니다. – Patrick

+0

렌더러가 스크립트의 여러 줄을 삼켰다고 생각합니다. 나는 code/pre 태그로 감싸기보다는 코드를 들여 쓰기하도록 편집을 제출했다. <: 마지막 몇 줄 '#이 경우 테스트 -r $ VF' 'then' '\t VC = $ (나오지도 -e '// S/^ 버전'기존 VERSION-FILE을' '구문 분석해야한다 $ VF)' 'else' '\t VC = unset' 'fi' '# 버전이 변경된 경우, 업데이트 버전 FILE' '테스트 "$ VN"= "$ VC"|| {' ' \t echo "버전 : $ VN"> $ VF' '\t 에코> & 2 "($ VF 업데이트 됨)"' '}' – seanf

+0

와우, 추한. 전체 스크립트 사본을 여기에 넣었습니다 : https://gist.github.com/880771 – seanf

관련 문제