Правильный способ получить модули из частного хранилища - PullRequest
0 голосов
/ 08 марта 2020

У меня есть личное 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":

go
└── pkg
    └── mod
        └── cache
            └── download
                └── mod.org
                    └── bar.git
                        └── @v
                            ├── v1.0.0.info
                            ├── v1.0.0.lock
                            └── v1.0.0.zip.tmp882433775

, но я все еще могу ' t использовать один в качестве зависимости в другом go -проекте.

Ответы [ 2 ]

1 голос
/ 12 марта 2020

Сервер для https://mod.org/bar должен вернуть go-import метаданные в соответствии с протоколом, описанным в https://golang.org/cmd/go/#hdr -Remote_import_paths .

Существует несколько реализаций с открытым исходным кодом, таких как:

Вы можете хранить учетные данные (или получить доступ к токенам) для сервера HTTPS и базового репозитория в файле .netrc и используйте переменную среды GOPRIVATE, чтобы команда go не искала ваше личное хранилище в публичном прокси c.

0 голосов
/ 07 апреля 2020

Шаги для решения проблемы:

  1. изменено объявление модуля в go.mod на

    module mod.org/gom/bar
    
    go 1.13
    

    так же, как bitbucket структура репозитория

    enter image description here

    клон ссылки на репо:

    http://localhost:7990/scm/gom/bar.git
    ssh://git@mod.org/gom/bar.git
    
  2. изменение .gitconfig: добавление insteadOf (ssh или https)

    # [url "http://localhost:7990/scm"]
    [url "ssh://git@mod.org"]
          insteadOf = https://mod.org
    
  3. добавить 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
...