github 저장소의 특정 태그에 "go get"을 수행하는 방법


89

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 버전을 설정하기 위해 gitin GOPATH/src/github...을 사용하여 수동으로 태그를 확인했습니다 .

마지막 접근 방식을 사용하는 문제는 종속성을 가져 오려고 할 때 go get -u -f ./...마스터 브랜치에서 찾으려고 시도하고 일부는 마스터 브랜치에 존재하지 않는다는 것입니다.

TL; DR : go get특정 github 태그에서 수행 하고 올바른 종속성을 가져옵니다.


이 .. 자식 태그 -a의 v0.8.8 시도 - "당신의 코멘트"
쇼크 Londhe

2
@AshokLondhe 그는 태그 go get를 만드는 방법이 아니라에 태그를 사용하는 방법을 묻습니다 .
wonderb0lt

@ wonderb0lt 태그를 추가하는 명령입니다.
Ashok Londhe 2015 년

내가 ... 내가 아니라 특정 태그를 확인하고, 나는 그것이 가능하지 않았다 시도 마지막 방법을 찾는 시도 생각
wonderb0lt

1
이것 좀 봐 . 마지막에 슬라이드는 몇 가지 종속성 관리 대안을 제공합니다.
wonderb0lt

답변:


34

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의 모듈에 대한 정보


1
Google 부분에 대해 좀 더 자세히 설명해 주시겠습니까? 이동 커뮤니티의 메일 링리스트에서 이것에 대한 큰 토론이 있습니다. 거기에서 논의되지 않은 다른 방향이 있습니까?
Not_a_Golfer

1
@Not_a_Golfer 바둑 팀의 일원은 아니지만, 현재 내부적으로 벤더 링을 사용하고 있고 부피가 크다고 이야기했습니다. 그래서 그들은 공식 도구로 더 잘 해결하는 데 관심이있었습니다. 비공식적 성명이라고 생각하면 더 분명해질 것입니다.
Robin Andersson 2015 년

2
AFAIK, 유일한 제안은 공식 공급 업체 / 종속성 파일 형식입니다. 프로젝트가 종속성 도구에 묶여 있지 않고 원하는 솔루션과 상호 운용 할 수 있다는 점에서 여전히 훌륭합니다 (예 : 수정 잠금을 선호하고 다른 사람들은 벤더 링을 선호 함).
JimB

모듈은 코드 컴파일러에 대한 종속성을 실제로 다루지 않으므로 수정 버전으로 go get protoc-gen-go를 사용해야합니다. 따라서 2 개의 다른 위치에서 동일한 버전 관리를 계속 추적해야합니다 (라이브러리가 생성기와 밀접하게 연결되어 있기 때문)
Martin Kosicky

24

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.


4
go 1.13에서는 go mod init모듈 ID 가 필요합니다. 예go mod init local/build
archie

11

나는 이것으로 성공했습니다.

  • 태그없이 get 명령을 실행하십시오. 마스터 브랜치를 복제해야합니다.
  • 복제 디렉토리로 이동하고 원하는 태그 또는 분기를 체크 아웃하십시오.
  • go get 명령을 다시 실행하면 체크 아웃 된 분기에서 명령을 처리해야합니다.

4
처음 실행할 go get -d <git-url>때 패키지를 다운로드하고 설치를 건너 뛰는 데 사용할 수 있습니다 .
webwurst

특정 태그가 필요할 때 사용해야하는 것입니다. gopkg.in은 너무 제한적입니다.
Hrishikesh Kumar

3

이 질문은 Go 모듈보다 앞서 있지만 향후 참조를 위해 특정 버전을 가져 오는 Go 1.11의 올바른 절차는 다음과 같습니다.

go get github.com/influxdb@[version]

또는 특정 git 태그를 얻으려면 :

go get github.com/influxdb@[gitref]


1

나는 적어도 git 저장소의 경우이 문제를 해결하기 위해 (다소 hackish하지만 작동하는) 접근 방식을 가지고 있습니다. , 저는 Atlassian SourceTree를 사용하고 있습니다).

내 패키지 구성을 팀원과 공유하기 위해 GOPATH 에서 git 저장소를 만들었 습니다 . 그런 다음 모든 패키지 (적어도 이런 방식으로 관리하고 싶은 패키지)를이 저장소에 git 하위 모듈로 추가했습니다. 이를 위해서는 기존 저장소 폴더를 다른 곳으로 옮기고 git을 혼동하지 않도록 git 하위 모듈로 다시 추가해야합니다. 이 과정은 다소 지루하지만 그만한 가치가 있음이 입증되었습니다.

이제 새로운 go 패키지를 사용할 때마다 GOPATH-repo에 커밋하고 푸시 할 수 있습니다. 내 팀원이이 저장소에서 가져 와서 git 하위 모듈 업데이트 (또는 SoureTree를 통해 자동으로 업데이트)를 발행하면 패키지 버전이 나와 동일한 태그에서 체크 아웃됩니다.

물론 이것은 git 소스 제어하에있는 패키지에서만 작동합니다.


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.