Как использовать локальные версии зависимостей скольжения?
Я работаю над проектом Go, который использует Glide для управления зависимостями. Мне нужно внести изменения в проект, а также в несколько зависимостей, используемых проектом. Мне нужно протестировать эти изменения вместе, прежде чем вносить изменения в каждый проект в отдельности.
Как я могу сказать Glide (или Go) использовать локальные версии этих проектов (например, найденные в $GOPATH/src/...
), а не сносить что-то и набивать vendor
каталог)?
Чтобы привести пример:
github.com/hyperledger/burrow
зависит от:github.com/tendermint/tendermint
, который зависит от:github.com/tendermint/go-crypto
Мне нужно внести некоторые изменения, охватывающие все три проекта. Я хочу проверить изменения, выполнив вещи в burrow
проект, но мне нужно, чтобы выполнить мои версии разработки tendermint
а также go-crypto
, который у меня есть локально.
2 ответа
Если вы хотите проверить зависимости в "$GOPATH/src/...", просто временно удалите каждый файл glide в корне вашего проекта (glide.yaml, glide.lock и т. Д.). Затем вы можете вернуть эти файлы обратно, если вам нужно снова использовать зависимости vendor.
Обновление 1
Я искал такое же решение для своих проектов, а затем выяснил, что в документации по glide указан дополнительный полезный параметр для импорта в glide.yaml. Согласно официальной документации:
repo
: Если имя пакета не является местоположением репозитория или это частное хранилище, его можно указать здесь. Пакет будет извлечен из репозитория и помещен туда, где указано имя пакета. Это позволяет использовать вилки.
В этом случае вы просто помещаете свой код куда-нибудь (я думаю, что GitHub или Gitlab для частных репозиториев вашего $GOPATH/src/github.com/hyperledger/burrow) затем редактируете свой glide.yaml:
- package: github.com/tendermint/tendermint <-- vendor name dependencies
repo: github.com/myrepo/tendermint <-- your remote fork
version: vx.x.x or your sha commit code
Таким образом, вы можете переключиться с официальной версии на форк и провести тесты. Чтобы вернуться к официальной версии, просто удалите или прокомментируйте атрибуты репо и версии:
- package: github.com/tendermint/tendermint <-- vendor name dependencies
# repo: github.com/myrepo/tendermint <-- your remote fork
# version: vx.x.x or your sha commit code
Теперь я тестирую свои вилки таким образом, и вам не нужно менять пути импорта в коде, надеюсь, это поможет.
Обновление 2
Еще один полезный способ - использовать скользящее зеркало:
Зеркала предоставляют возможность заменить место репо другим местоположением, которое является зеркалом оригинала. Это полезно, если вы хотите иметь кеш для вашей системы непрерывной интеграции (CI) или если вы хотите работать с зависимостью в локальном расположении.
Я думаю, что это лучшее решение, например, для типа командной строки:
$ glide mirror set github.com/tendermint/tendermint file:///User/yourname/Gospace/src/github.com/tendermint/tendermint
Это создаст mirror.yaml в вашем GLIDE_HOME (если он не существует, он будет помещен в вашу папку $USER/.glide). Теперь вы можете протестировать свою локальную версию (под GOPATH) без форка вашего проекта (как я писал выше). Как только вы закончили свои тесты, просто удалите его:
$ glide mirror remove github.com/tendermint/tendermint
Учитывая, что вендор Go сначала ищет пакеты в корне вашего проекта /vendor
папку, а когда не найден, то в GOPATH
и что Glide устанавливает ваши зависимости в /vendor
папка означает, что вы можете просто настроить свой проект с glide install
затем вручную удалите зависимости, которые были локально изменены (или вы собираетесь изменить) в своих локальных установках из вашего проекта /vendor
После этого папка и поставщик Go выберут локально измененные версии, найденные в GOPATH
,
После того, как вы все протестировали, вы должны сначала зафиксировать все измененные зависимости, а затем вернуться в свой проект и изменить glide.yaml
файл для использования новых версий этих зависимостей.
Это должно работать.