2016-08-24 3 views
1

buildroot 기반 프로젝트의 자동 버전 번호 생성을 처리하려고합니다. 현재 buildroot, 패키지 구성 및 처음부터 프로젝트를 빌드하는 스크립트가 포함 된 메타 repo가 ​​있습니다. 그리고 두 번째 저장소는 buildroot 패키지 중 하나로 빌드 된 애플리케이션 특정 소스 코드를 포함합니다.git에서 원격 저장소의 출력을 나타내는 방법

buildroot가 실행되면 지정된 분기 헤드에서 패키지 repo의 얕은 복제를 수행합니다. 저장소에 대한 전체 복제를 수행하지 않고 git 설명을 실행하는 방법을 원합니다.

현재 프로젝트는 git describe를 사용하여 상당히 정확한 빌드 번호를 생성 할 수 있습니다. 메이저 버전과 마이너 버전으로 태그를 붙이면, 빌드 과정에서 태그가 추가 된 이후 커밋 수를 원한다.

git ls-remote를 사용하여 SHA1 해시를 생성하기 위해 대략적인 근사치를 해킹했으나 커밋 수를 얻을 수 없지만이를 달성하는 방법을 알고 있습니까?

+1

유일한 방법, 복제되고있는 지점의 이름입니다 * 카운트 *이 커밋 자신을하는 것입니다 커밋. * 가장 간단한 방법은 완전한 클론을 만드는 것입니다. ('--reference'를 사용하고 이것을 빠르게하기 위해 참조 클론을 유지하십시오.) * 가장 빠른 방법은 아마도 원격 서버가 처음에'git describe' 문자열을 얻도록하는 것입니다. – torek

답변

0

너무 많은 수고와 검색을 한 후 필자는 원한다면 원하는 문자열을 생성하기 위해 원격으로 받기를 포기하고 다음 섹션을 Makefile에 썼다. GIT_SITE 원격 저장소의 주소, GIT_BRANCH 얻을 수있는 예를 들어 releaseCandidate/4.0

GIT_COMMIT_NUMBER = $(shell git clone $(GIT_SITE) -n -q temp && cd temp && git rev-list --count master..origin/$(GIT_BRANCH) && cd .. && rm -fr temp) 

# This was easier to do, pulls the hash from the remote repo and cuts it down to be 7 characters long (same as would come out of git describe) 
GIT_HASH = $(shell git ls-remote $(GIT_SITE) $(GIT_VERSION) | cut -f 1 | awk '{print substr($$0,1,7) }') 

# This cuts down the branch name given to us by buildroot so that we cas use it in the build string generation 
GIT_BRANCH_FLAG = $(shell echo $(GIT_BRANCH) | cut -f 1 -d '/') 
GIT_BRANCH_VERSION = $(shell echo $(GIT_BRANCH) | cut -f 2 -d '/') 

# Finally we put those bits together to get the outputs we want 
VERSION ?= $(GIT_BRANCH_VERSION) 
GIT_DESCRIBE ?= $(GIT_BRANCH_VERSION)-$(GIT_COMMIT_NUMBER)-g$(GIT_HASH)-$(GIT_BRANCH_FLAG) 
관련 문제