Сделать go get репозитория без обновления его внутренних зависимостей

Когда я делаю go get нужного мне репозитория (моего отдельного репозитория), вместо того чтобы просто подтянуть все зависимости, он обновляет версии некотрых внутренних зависимостей того репозитория, который я стягиваю, и скачивает их. Такими тэмпами, однажды это сломает сборку.

Как я могу сделать go get репозитория, без обновления его внутренних звисимотей? Или, возможно, там есть внутренний механизм, который предотвратит обновление и скачивание обратно несовместимых версий.


Ответы (2 шт):

Автор решения: Eugene X

Ну для начала не используй go get используй go mod, тогда все зависимости с версиями будут явно храниться в журнале go.mod.

go mod init .
go mod edit -require github.com/wilk/[email protected]
go get -v -t ./...
go build
go install
→ Ссылка
Автор решения: Senior Pomidor

введите сюда описание изображения

В этом примере главный модуль зависит от A 1.0 и B 2.1.
Поскольку B 2.1 зависит от A 1.1, будет использоваться именно эта версия A.
и еще используется A 1.1, а он в свою очередь использует C 1.1.

Окончательный список зависимостей:
A 1.1
B 2.1
C 1.1

теперь понимаете почему go get или go mod tidy обновляют ненужные вам зависимости?
вы можете попробоввать использовать exclude или replace

require (
    github.com/dep/one v1.0.0
    github.com/dep/two/v2 v2.3.0
    github.com/dep/other v0.0.0-20180523231146-b3f5c0f6e5f1
    github.com/dep/legacy v2.0.0+incompatible
)

exclude github.com/dep/legacy v1.9.2
replace github.com/dep/one => github.com/fork/one

exclude - запрещает использование определенной версии модуля
replace - заменяет один модуль на другой

→ Ссылка