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$ 

Работал! Спасибо всем, что помогло. Без вашей помощи эту проблему не решить.

Примечание. Это работает только для общедоступных репозиториев.

Другие вопросы по тегам