Go get извлекает неправильный репозиторий
Мой модуль gitlab.com/getsote/utilities/slogger
Мой репозиторий gitlab.com/getsote/utilities/slogger.git
Когда я бегу go get gitlab.com/getsote/utilities/slogger
, Я получаю сообщение ниже.
Scotts-Mac-mini:seeding syacko$ go get gitlab.com/getsote/utilities/slogger
go get gitlab.com/getsote/utilities/slogger: module gitlab.com/getsote/utilities/slogger: git ls-remote -q origin in /Users/syacko/workspace/sotesoft/golang/pkg/mod/cache/vcs/80b3644beae1b986f1c659355360479e2463820660aa328d2edb1e571aba259b: exit status 128:
remote: The project you were looking for could not be found.
fatal: repository 'https://gitlab.com/getsote/utilities.git/' not found
Scotts-Mac-mini:seeding syacko$
В gitlab.com/getsote/utilities.git
это подкаталог, а не репозиторий. Я не понимаю почемуgo get
собирается утилит как репозиторий?
==========================
ПРЕДЫДУЩИЕ обновления
Структура каталога:
GOPATH/src/slogger
|----go.mod
|----slogger.go
|----slogger_test.go
go.mod file
module slogger or gitlab.com/getsote/utilities/slogger -> still gets the error below
go 1.14
gitlab.com/getsote/utilities contains repository slogger.git
Я провел тест, чтобы убедиться, что проблема в количестве узлов на пути. Итак, я создаю новый репозиторий без подкаталога и вставляю код трудяги. Затем побежалgo get gitlab.com/getsote/slogger
которые генерируют другое сообщение об ошибке.
GOPATH/gitlab.com/getsote/test-go-mod -> create new directory and added slogger files listed above
gitblab.com/getsote/test-go-mod -> new repository with one less level
Scotts-Mac-mini:test-go-mod syacko$ go get gitlab.com/getsote/test-go-mod
go: downloading gitlab.com/getsote/test-go-mod v0.0.0-20200409023538-794310bf7cf9
go get gitlab.com/getsote/test-go-mod: gitlab.com/getsote/test-go-mod@v0.0.0-20200409023538-794310bf7cf9: verifying module: gitlab.com/getsote/test-go-mod@v0.0.0-20200409023538-794310bf7cf9: reading https://sum.golang.org/lookup/gitlab.com/getsote/test-go-mod@v0.0.0-20200409023538-794310bf7cf9: 410 Gone
server response:
not found: gitlab.com/getsote/test-go-mod@v0.0.0-20200409023538-794310bf7cf9: invalid version: git fetch -f origin refs/heads/*:refs/heads/* refs/tags/*:refs/tags/* in /tmp/gopath/pkg/mod/cache/vcs/7753c92c9bd1419156d8120684b7f3707fd207e01a2947ba89e2acfd2ecfb4d0: exit status 128:
fatal: could not read Username for 'https://gitlab.com': terminal prompts disabled
Scotts-Mac-mini:test-go-mod syacko$
Это все еще получает ошибку статуса 128 для отсутствующей версии. Кроме того, он ищет код в правильном месте. Если это правда, то мне просто нужна помощь с отсутствующей версией. Переход к сокращенной структуре каталогов возможен.
========================
Последнее обновление
@praveent > Решение на https://medium.com/cloud-native-the-gathering/go-modules-with-private-git-repositories-dfe795068db4 у меня не сработало. Поэтому я начал с нуля, чтобы посмотреть, как решить проблему.
2 ответа
Причина в том, что для репозитория git предполагается, что утилиты - это репо, а не утилиты /slogger
Есть способ изменить это поведение, реализовав API go get. Но Gitlab еще не реализовал то же самое из соображений безопасности. Вы можете прочитать больше здесь. Проблема с Gitlab
Обновление: добавьте ссылку на проблему gitlab, отслеживающую эту проблему.
Итак, вот как я заставил это работать с помощью gitlab.com. Я не говорю, что другие способы не сработают, они просто не подходили для меня и моей установки. Во-первых, поскольку мне все равно, доступен ли код для всех, я создал новую группу на gitlab.com. Эта новая группа с самого начала является общедоступной, поэтому настраивать разрешения не нужно. Затем я создаю репозиторий под названиемpackages
и клонировал репозиторий на мою локальную машину с той же структурой каталогов, что и на gitlab.com, gitlab.com/soteapps/packages
с участием ~/workspace/soteapps/packages
на моей машине. Оба они находятся за пределами GOPATH. Я не уверен, что это важно, но так работает, поэтому я помещаю это здесь.
Под пакетами я скопировал каталог и код slogger.
cp -R slogger ~/workspace/soteapps/packages/.
Отредактировал go.mod
файл для соответствия структуре репозитория, который находится в packages
каталог. В каталоге slogger нет файла go.mod.
module gitlab.com/soteapps/packages
go 1.14
Отредактировал hello.go
импорт в соответствии с пакетом.
package main
import (
"fmt"
"rsc.io/quote"
"gitlab.com/soteapps/packages/slogger"
)
func main() {
fmt.Println(quote.Hello())
slogger.Info("Test message")
}
Создал программу, используя go build -o hello
а затем запустил это hello
со следующими результатами:
Scotts-Mac-mini:hello syacko$ hello
Hello, world.
INFO:2020/04/10 21:11:33 Test message
Scotts-Mac-mini:hello syacko$
Работал! Спасибо всем, что помогло. Без вашей помощи эту проблему не решить.
Примечание. Это работает только для общедоступных репозиториев.