Подтвердить что ты не робот

Каков наиболее эффективный способ блокировки "версий" внешней зависимости в Голанге?

По умолчанию Go вытягивает импортированные зависимости, захватывая последнюю версию в master (github) или default (mercurial), если он не может найти зависимость от вашего GOPATH. И хотя этот рабочий процесс довольно прост для понимания, стало довольно сложно жестко контролировать. Поскольку все изменения в программном обеспечении приводят к некоторому риску, я хотел бы уменьшить риск этого потенциального изменения управляемым и повторяемым способом и избежать непреднамеренного подбора изменений зависимости, особенно при выполнении чистых сборок через сервер CI или при подготовке к развертыванию.

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

---- Обновление ----

Дополнительная информация о Текущее состояние Go Packaging. В то время как я закончил (начиная с 7.20.13), захватив зависимости в сторонней папке и управляя обновлениями (ala Camlistore), я все еще ищу лучший способ...

Вот отличный список опций.

Кроме того, не забудьте увидеть go 1.5 vendor/experiment, чтобы узнать, как go может решить проблему в будущих версиях.

4b9b3361

Ответ 1

Вы можете найти способ Camlistore, это интересно.

Смотрите сторонний каталог и, в частности, update.pl и rewrite-imports.sh script. Эти скрипты обновляют внешние репозитории, при необходимости меняют импорт и проверяют, что статическая версия внешних репозиториев проверяется вместе с остальным кодом camlistore.

Это означает, что camlistore имеет полностью повторяемую сборку, поскольку она автономна, но сторонние компоненты могут быть обновлены под контролем разработчиков camlistore.

Ответ 2

Существует проект, который поможет вам в управлении вашими зависимостями. Проверьте gopack

Ответ 3

godep

Я начал использовать godep в начале прошлого года (2014) и был очень доволен этим (он встретил проблемы, о которых я упоминал в своем оригинал вопрос). Я больше не использую пользовательские скрипты для управления поставщиками зависимостей, так как godep просто позаботится об этом. Он отлично подходит для обеспечения того, чтобы никакой дрифт не вводился независимо от времени или состояния машинного пакета. Он работает с существующим механизмом go get и вводит возможность привязки (godep save) и восстановления (godep restore) на основе Godeps/godeps.json.

Проверьте это:

https://github.com/tools/godep

Ответ 4

В этом нет встроенного инструментария для этого. Однако вы можете разблокировать зависимости самостоятельно либо на локальном диске, либо в облачном сервисе, и только после того, как вы проверили их, слились в восходящие изменения.

Ответ 5

Третий репозиторий полностью находится под вашим контролем. "go get" подсказки клонов, вы правы, но вы можете проверить любую ревизию клонированного по ходу или клонированного вами репозитория. Пока вы не делаете "go get -u", ничто не затрагивает ваши сторонние репозитории, уже сидящие на вашем жестком диске.

Фактически, ваши внешние, локально клонированные зависимости всегда блокируются по умолчанию.