go.mod의 Go 모듈 종속성을 repo의 최신 커밋으로 지정하는 방법은 무엇입니까? 대한 발견 된

v1.11 Go부터 모듈 지원이 추가되었습니다. 명령

go mod init <package name>
go build

생성하는 것입니다 go.modgo.sum패키지 의존성에 대한 발견 된 모든 버전을 포함하는 파일.

모듈에 릴리스가없는 경우 해당 모듈의 최신 커밋이 사용됩니다. 모듈에 릴리스가있는 경우 최신 릴리스가 종속성으로 선택됩니다.

그러나 때로는 아직 게시 된 릴리스에없는 기능이 필요하지만 해당 릴리스 이후에 만들어진 커밋에서 가져온 기능이 필요합니다. go.mod모듈 릴리스가 아니라 모듈 저장소의 특정 커밋을 가리 키도록 설정하는 방법은 무엇입니까?

go.mod에서 직접 할 수있는 것 같습니다.

module /my/module

require (
...
github.com/someone/some_module v0.0.0-20181121201909-af044c0995fe
...
)

v0.0.0마지막으로 게시 된 릴리스 태그와 일치하지 않는 위치 는 20181121201909커밋 타임 스탬프이며 af044c0995fe커밋 해시입니까? 그러한 정보를 직접 찾아서 입력해야합니까, 아니면 더 나은 방법이 있습니까?



답변

원하는 커밋 해시에서 ‘가져 오기’만하면됩니다.

go get github.com/someone/some_module@af044c0995fe

‘go get’은 종속성 파일 (go.mod, go.sum)을 올바르게 업데이트합니다.

추가 정보 : https://github.com/golang/go/wiki/Modules#how-to-upgrade-and-downgrade-dependencies


답변

또한 특정 커밋을 얻기 위해 사용 하는 Everton 의 답변 외에도 다음 go get github.com/someone/some_module@af044c0995fe과 같은 브랜치 이름을 사용할 수 있습니다.

  • go get github.com/someone/some_module@master
  • go get github.com/someone/some_module@dev_branch

이러한 예제는 해당 분기에서 최신 커밋을 가져옵니다.

파일 에 .NET 과 같은 의사 버전 으로 계속 기록 go.mod됩니다 v0.0.0-20171006230638-a6e239ea1c69. (이는 표준 semver 주문을 기반으로 모든 버전에서 간단한 총 주문을 제공하는 데 도움이됩니다 .)


답변

나는 그것이 모든 사람을 위해 어떻게 작동하는지 얼마 동안 머리를 두 드렸고 나는 그것을 실행할 수 없습니다. 저에게는 마스터 브랜치에 전념해야했고 그때는 나만 얻을 수있었습니다.

go가 특정 브랜치, 커밋 ID 또는 태그로 작업하려면 아래 명령을 실행하여 go 모듈에 대한 플래그를 활성화해야합니다.

go env -w GO111MODULE = on

이 후 우리는 할 수 있습니다

go get repo@branchname
go get repo@tag
go get repo@commithash


답변

일시적으로 로컬 디렉토리에 대한 종속성을 대체하려는 경우 (예 : 2 개의 모듈을 동시에 작업하는 경우) 파일 replace끝에 명령문을 추가 할 수 있습니다 go.mod.

module example.com/mypkg

go 1.15

require (
  gitlab.com/someone/a_package v0.14.2
)

replace gitlab.com/someone/a_package => ../my_forks/a_package


답변

또한 go.mod 파일의 태그 대신 latest라는 단어를 넣으면 최신 태그 인 모듈로 변경됩니다.

예를 들면 :

module /my/module

require (
...
github.com/someone/some_module latest
...
)

될 것입니다

module /my/module

require (
...
github.com/someone/some_module v2.0.39
...
)

달리기 후 go mod tidy


답변