перейти к поставщику модов без обновления до последней версии

Я пытаюсь понять, можно ли запустить программу go mod vendor без обновления моего файла go.mod с помощью инструмента go.

Я специально go get package/subpackage@commit и фиксирую свой go.mod с правильной версией.

Затем я запускаю go mod vendor, и он автоматически меняет версию пакета, которую я только что специально установил.

Я просмотрел эту страницу безрезультатно: https://github.com/golang/go/wiki/Modules#how-do-i-use-vendoring-with-modules-is-vendoring-уходящий

Мне нужно использовать vendor, потому что я запускаю скрипт, который редактирует некоторые из поставщиков deps., Я смотрю на следующий процесс сборки:

GO111MODULE=on go get package/subpackge@commit
GO111MODULE=on go mod vendor
./Script/patch_vendors.sh --write
GO111MODULE=off go build

Другой вариант - изменить скопированный исходный код, куда бы продавец мод не загружал его, но не знаю, как к этому подойти.

заранее спасибо


person Tristian    schedule 02.04.2019    source источник
comment
Попробуйте go -mod=readonly mod vendor.   -  person Peter    schedule 02.04.2019
comment
Спасибо; будет действительно нашел этот документ: github.com/thepudds/go -module-knobs / blob / master / README.md, но упоминается только, что этот флаг применяется к go build   -  person Tristian    schedule 02.04.2019
comment
go mod используется для игнорирования флага -mod. Я не уверен, что это изменилось к настоящему времени.   -  person Peter    schedule 02.04.2019


Ответы (1)


Согласно https://tip.golang.org/cmd/go/#hdr-Maintain_module_requirements:

Сама команда go автоматически обновляет файл go.mod, чтобы сохранить стандартное форматирование и точность операторов require.

Любая команда go, которая обнаружит незнакомый импорт, найдет модуль, содержащий этот импорт, и автоматически добавит последнюю версию этого модуля в go.mod. […]

Любая команда go может определить, что требование модуля отсутствует и его необходимо добавить […].

Команда go mod vendor копирует все транзитивные импорты ваших пакетов и их тестов, поэтому она автоматически обновляет файл go.mod, чтобы гарантировать наличие всех импортированных пакетов.

Таким образом, проблема здесь, вероятно, в том, что commit, который вы выбрали для package/subpackage, не может предоставить какой-либо пакет, который появляется в транзитивном импорте вашей программы. Если это верно, вы должны обнаружить, что go list all, go test all и go mod tidy все вносят одинаковое изменение в требования вашего модуля.

person bcmills    schedule 02.08.2019