Правильный способ получить зависимости из частного репозитория
У меня есть личное bitbucket
репо на http://localhost:7990
=> клонировать ссылкуhttp://localhost:7990/scm/gom/bar.git
go.mod
выглядит как:
module mod.org/bar
go 1.13
Ссылки, доступные в удаленном репозитории:
git ls-remote http://localhost:7990/scm/gom/bar.git
From http://localhost:7990/scm/gom/bar.git
d456de4f12785b26ac27ba08cffb76687d1287c8 HEAD
d456de4f12785b26ac27ba08cffb76687d1287c8 refs/heads/master
f948bd47a22c5fb9abed5bff468a10fc24f67483 refs/tags/v1.0.0
Я изменился .gitconfig
к
[url "http://localhost:7990/scm/gom"]
insteadOf = https://mod.org
и попытался получить модуль name
, получить no such host
ошибка:
go get -v mod.org/bar
go get lmod.org/bar: unrecognized import path "lmod.org/bar" (https fetch: Get https://lmod.org/bar?go-get=1: dial tcp: lookup lmod.org: no such host)
Когда я добавляю расширение .git
go get -v mod.org/bar.git
go: finding lmod.org/bar.git v1.0.0
go: downloading lmod.org/bar.git v1.0.0
verifying lmod.org/bar.git@v1.0.0: lmod.org/bar.git@v1.0.0: reading https://sum.golang.org/lookup/lmod.org/bar.git@v1.0.0: 410 Gone
go
скачать версию с тегом v1.0.0
к GOPATH = /Users/user/go"
:
$GOPATH
└── go
└── pkg
└── mod
└── cache
└── download
└── mod.org
└── bar.git
└── @v
├── v1.0.0.info
├── v1.0.0.lock
└── v1.0.0.zip.tmp882433775
, но я все еще не могу использовать его как зависимость в другом go-проекте.
2 ответа
Сервер для https://mod.org/bar
нужно вернуться go-import
метаданные в соответствии с протоколом, описанным в https://golang.org/cmd/go/.
Существует несколько реализаций с открытым исходным кодом, таких как:
Вы можете хранить учетные данные (или токены доступа) как для HTTPS-сервера, так и для базового репозитория в .netrc
файл и используйте GOPRIVATE
переменная среды, чтобы сообщить go
команда не искать ваше частное репо в публичном прокси.
Вы не можете использовать частное репо без
.git
extension из-за того, что инструменты go не знают протокол управления версиями вашего частного репо, git, svn или любого другого.
За
github.com
или же
golang.org
они жестко запрограммированы в исходный код go.
Инструмент go сделает
https
запрос, чтобы узнать, что перед получением вашего частного репо:
https://private/user/repo?go-get=1
Если ваше частное репо не поддерживает
https
, пожалуйста, используйте
replace
синтаксис модуля go для прямого указания инструментов go:
require private/user/repo v1.0.0
...
replace private/user/repo => private.server/user/repo.git v1.0.0
Шаги по решению проблемы:
изменено объявление модуля в
go.mod
кmodule mod.org/gom/bar go 1.13
такой же как
bitbucket
структура репозиториевссылки репо на клонирование:
http://localhost:7990/scm/gom/bar.git ssh://git@mod.org/gom/bar.git
изменение
.gitconfig
: ДобавитьinsteadOf
(ssh
илиhttps
)# [url "http://localhost:7990/scm"] [url "ssh://git@mod.org"] insteadOf = https://mod.org
Добавить
https://mod.org
в частный репозиторийgo env -w GOPRIVATE="mod.org"
После всех приготовлений модуль будет доступен для go mod download
из другого модуля version tags
module mod.org/gom/foo
go 1.13
require (
mod.org/gom/bar v1.0.0-beta.1
)
replace (
mod.org/gom/bar => mod.org/gom/bar.git v1.0.0-beta.1
)
или руководство
go get -u mod.org/gom/bar.git
go get mod.org/gom/bar.git@v1.0.0-beta.1