Как использовать локальные версии зависимостей скольжения?

Я работаю над проектом 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 файл для использования новых версий этих зависимостей.

Это должно работать.

Другие вопросы по тегам