Go版本
go版本 go1.21.5 darwin/arm64
在你的模块/工作区中的go env
输出:
GO111MODULE=''
GOARCH='arm64'
GOBIN=''
GOCACHE='/Users/nyap/Library/Caches/go-build'
GOENV='/Users/nyap/Library/Application Support/go/env'
GOEXE=''
GOEXPERIMENT=''
GOFLAGS=''
GOHOSTARCH='arm64'
GOHOSTOS='darwin'
GOINSECURE=''
GOMODCACHE='/Users/nyap/go/pkg/mod'
GONOPROXY='gitlab.com/grailbio/teams/*'
GONOSUMDB='gitlab.com/grailbio/teams/*'
GOOS='darwin'
GOPATH='/Users/nyap/go'
GOPRIVATE='gitlab.com/grailbio/teams/*'
GOPROXY='https://artifactory.ti-apps.aws.grail.com/artifactory/api/go/go,https://proxy.golang.org'
GOROOT='/Users/nyap/.gimme/versions/go1.21.5.darwin.arm64'
GOSUMDB='sum.golang.org'
GOTMPDIR=''
GOTOOLCHAIN='auto'
GOTOOLDIR='/Users/nyap/.gimme/versions/go1.21.5.darwin.arm64/pkg/tool/darwin_arm64'
GOVCS=''
GOVERSION='go1.21.5'
GCCGO='gccgo'
AR='ar'
CC='clang'
CXX='clang++'
CGO_ENABLED='0'
GOMOD='/dev/null'
GOWORK=''
CGO_CFLAGS='-O2 -g'
CGO_CPPFLAGS=''
CGO_CXXFLAGS='-O2 -g'
CGO_FFLAGS='-O2 -g'
CGO_LDFLAGS='-O2 -g'
PKG_CONFIG='pkg-config'
GOGCCFLAGS='-fPIC -arch arm64 -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -ffile-prefix-map=/var/folders/w7/l4dcw2ss1l98wqcxsx1pq03h0000gs/T/go-build3824820425=/tmp/go-build -gno-record-gcc-switches -fno-common'
你做了什么?
在工作区的.git/config
中:
[url "ssh://git@gitlab.com"]
insteadOf = https://gitlab.com
然后是go mod tidy
。
你看到了什么发生?
go mod tidy
发出了许多no secure protocol found for repository
错误:
go: downloading gitlab.com/grailbio/teams/bxds/gsl/core.git v0.3.1
go: grail.com/cmd/bio-gsl imports
gitlab.com/grailbio/teams/bxds/gsl/core.git/bio/comparator/count: no secure protocol found for repository
go: grail.com/cmd/bio-gsl imports
…
你期望看到什么?
没有错误。
将url
设置从.git/config
移动到~/.gitconfig
后,go mod tidy
按预期工作。
9条答案
按热度按时间hfyxw5xn1#
事实是,本地的
.git/config
被忽略了,这是设计好的。git
仓库中包含go
命令下载依赖项,但它与包含您自己模块的仓库不同。然而,首先需要这个
insteadOf
指令是出乎意料的。gitlab.com
不是受 #26134 影响的提供者之一,因此go
命令应该使用git ls-remote
来探测仓库,以确定要使用哪种协议。那里可能有一个真正的错误,我们可以修复它,这样你就不需要一开始就使用insteadOf
指令了。w8ntj3qf2#
为了认证原因,也许可以使用insteadOf?
dfddblmv3#
查看 code ,我认为
go
命令是尝试使用类似于git ls-remote ssh://gitlab.com/user/repo.git
的东西来ping仓库。相比之下,默认情况下GitLab要求特定的用户
git
,这将是一个类似于ssh://git@gitlab.com/user/repo.git
的URL。我们当然可以硬编码一个用户来尝试特定的常见主机(至少是GitHub和GitLab),但我想知道是否有更通用的方法来检测我们应该尝试哪个SSH用户。t5fffqht4#
这更像是一个权宜之计,但出于身份验证的原因,我在
~/.gitconfig
上使用了这个确切的配置:它与
GOPRIVATE
和GOPROXY=direct
完美配合(go模块调用git cli,然后执行ssh)。bwitn5fc5#
Jorropo,我好奇:如果你在
.gitconfig
中使用insteadOf = ssh://github.com/
,它是否仍然有效?(我的假设是它仍然有效,如果是这样,我认为
go
命令应该自己知道怎么做!)fwzugrvs6#
@bcmills 它没有:
ffx8fchx7#
@Jorropo,谢谢,我想这是因为#26134。那么对于
gitlab.com
的URL呢?uurity8g8#
你好!问题是实际存在的,我尝试用这种方式解决问题,但它没有帮助。
echo "machine $CI_SERVER_HOST login gitlab-ci-token password ${CI_JOB_TOKEN}" > ~/.netrc export GOPRIVATE=gitlab.com/* export GOPROXY=direct export GOSUMDB=off export PKG_CONFIG_PATH="/usr/lib/x86_64-linux-gnu/pkgconfig/" apt update && apt install -y libssl-dev openssl git gcc musl-dev pkg-config git config --global http.sslverify false
你能帮忙吗?
我认为最好的方法是为编译器创建一个新的环境,例如将GOSSL设置为off或将GOSECURE设置为off。
mf98qq949#
lint-test-job: # This job also runs in the test stage.
stage: test # It can run at the same time as unit-test-job (in parallel).
script:
- echo "Linting code..."
- git config --global url."http://192.168.88.88:30080/".insteadof "https://gitlab.yyle.com/"
- git config --global url."http://192.168.88.88:31080/".insteadof "http://gitlab.yyle.com/"
- git config --global --list
- go env -w GOPRIVATE=gitlab.yyle.com
- go env -w GOPROXY=https://proxy.golang.org,direct
- go mod tidy