[git] github 저장소의 특정 태그에 “go get”을 수행하는 방법
InfluxDB 데이터베이스 (버전 v0.8.8)를 컴파일하려고합니다. go get github.com/influxdb/influxdb
그러나 이것은 마스터 브랜치를 가져오고 v0.8.8
태그 가 필요합니다 .
나는 시도했지만 go get github.com/influxdb/influxdb/releases/tag/v0.8.8
찾을 수 없다는 말은 실패합니다.
또한 go get
마스터 브랜치 의 일반 작업을 시도한 다음 corret 버전을 설정하기 위해 git
in GOPATH/src/github...
을 사용하여 수동으로 태그를 확인했습니다 .
마지막 접근 방식을 사용하는 문제는 종속성을 가져 오려고 할 때 go get -u -f ./...
마스터 브랜치에서 찾으려고 시도하고 일부는 마스터 브랜치에 존재하지 않는다는 것입니다.
TL; DR : go get
특정 github 태그에서 수행 하고 올바른 종속성을 가져옵니다.
답변
go get
도구를 사용할 수 없습니다 . 대신 타사 go 패키지 관리 도구를 사용하거나보다 세밀하게 관리하려는 패키지에 대한 자체 포크를 만들어야합니다.
Google에서 일하는 사람에게이 문제 / 요구 사항을 인정하면서 그의 팀이 사용한 벤더 링은 부피가 크며 곧 공식 도구로 해결할 것이라고 말했습니다.
더 읽어보기 :
Go 1.6의 공급 업체
Vendoring은 타사 도구를 사용하여 패키지의 특정 태그 / 버전을 사용하는 프로세스를 더 쉽게 만들어주는 go 1.6 (이 게시물이 처음 작성된 후)의 실험 버전에서 릴리스 되었습니다 . go get
특정 태그 또는 버전을 가져 오는 기능이 아직 없습니다.
벤더 링 작동 방식에 대한 추가 정보 : 벤더 폴더 이해 및 사용
Go 1.11의 모듈
Go 1.11은 의존성 관리를 개선하기 위해 모듈이라는 실험적 기능을 출시했으며, Go 1.12에서 안정적으로 출시되기를 희망합니다 : Go 1.11의 모듈에 대한 정보
답변
go mod
지금 사용할 수 있습니다.
특정 태그의 바이너리 를 빌드 해야하는 사람들을 위해 다음 방법이 있습니다.
mkdir temp
cd temp
go mod init .
go get -d -v github.com/nsqio/nsq@v1.1.0
mkdir bin
go build -o bin/nsqd.exe github.com/nsqio/nsq/apps/nsqd
설명:
- 위의 코드는 NSQ v1.1.0을 가져와
nsqd
. go mod init .
개정 / 태그와 함께go.mod
사용할 수 있도록 현재 디렉토리에 파일을 만듭니다go get
. ( 이 링크 참조 )-d
“다운로드 전용”을 의미합니다. 직접 설치하려면이 플래그와이 줄 아래의 빌드 명령을 생략하십시오.-v
“상세하다”는 뜻입니다.- 위의 코드는 Windows 용입니다. 당신이 리눅스를 사용하는 경우, 교체
bin/nsqd.exe
와 함께bin/nsqd
.
다운로드 된 모듈은에 저장됩니다 %GOPATH%\pkg\mod
. GOPATH
디렉토리 를 오염시키지 않으려면 새 디렉토리를 만들고 설정하십시오 GOPATH
.
답변
나는 이것으로 성공했습니다.
- 태그없이 get 명령을 실행하십시오. 마스터 브랜치를 복제해야합니다.
- 복제 디렉토리로 이동하고 원하는 태그 또는 분기를 체크 아웃하십시오.
- go get 명령을 다시 실행하면 체크 아웃 된 분기에서 명령을 처리해야합니다.
답변
이 질문은 Go 모듈보다 앞서 있지만 향후 참조를 위해 특정 버전을 가져 오는 Go 1.11의 올바른 절차는 다음과 같습니다.
go get github.com/influxdb@[version]
또는 특정 git 태그를 얻으려면 :
go get github.com/influxdb@[gitref]
답변
나는 적어도 git 저장소의 경우이 문제를 해결하기 위해 (다소 hackish하지만 작동하는) 접근 방식을 가지고 있습니다. , 저는 Atlassian SourceTree를 사용하고 있습니다).
내 패키지 구성을 팀원과 공유하기 위해 GOPATH 에서 git 저장소를 만들었 습니다 . 그런 다음 모든 패키지 (적어도 이런 방식으로 관리하고 싶은 패키지)를이 저장소에 git 하위 모듈로 추가했습니다. 이를 위해서는 기존 저장소 폴더를 다른 곳으로 옮기고 git을 혼동하지 않도록 git 하위 모듈로 다시 추가해야합니다. 이 과정은 다소 지루하지만 그만한 가치가 있음이 입증되었습니다.
이제 새로운 go 패키지를 사용할 때마다 GOPATH-repo에 커밋하고 푸시 할 수 있습니다. 내 팀원이이 저장소에서 가져 와서 git 하위 모듈 업데이트 (또는 SoureTree를 통해 자동으로 업데이트)를 발행하면 패키지 버전이 나와 동일한 태그에서 체크 아웃됩니다.
물론 이것은 git 소스 제어하에있는 패키지에서만 작동합니다.
답변
maven golang 플러그인을 사용하면 GET 중에 브랜치, 태그 및 개정을 사용할 수 있습니다. GIT 저장소를 사용하여 이러한 경우 에 대한 테스트를 살펴볼 수 있습니다.