Я пытаюсь скомпилировать базу данных InfluxDB (версия v0.8.8), используя go get github.com/influxdb/influxdb
Но это тянет главную ветку, и мне нужен v0.8.8
тег.
Я пытался сделать: go get github.com/influxdb/influxdb/releases/tag/v0.8.8
но это не означает, что не могу найти.
Я также пытался сделать регулярный go get
мастер ветви, а затем проверять вручную из тега , используя git
в GOPATH/src/github...
для того , чтобы установить Corret версию.
Проблема с использованием последнего подхода заключается в том, что, когда я пытаюсь вытащить зависимости, go get -u -f ./...
он пытается найти их в главной ветке, а некоторые из них не существуют в главной ветке ...
TL; DR : выполнять go get
с определенным тегом github и извлекать правильные зависимости.
go get
, а не как его создать.Ответы:
Использование
go get
инструмента невозможно . Вместо этого вам нужно использовать сторонний инструмент управления пакетами go или создать свои собственные вилки для пакетов, которыми вы хотите управлять более детально.В разговоре с парнем, который работает в Google, он признал эту проблему / требование, он сказал, что поставка, которую использовала его команда, была громоздкой, и они, вероятно, скоро решат ее с помощью официальных инструментов.
Прочитайте больше:
Продажа в Go 1.6
Вендоринг был выпущен из экспериментального в go 1.6 (после того, как этот пост был изначально написан), что упрощает процесс использования определенных тегов / версий пакетов с использованием сторонних инструментов.
go get
по-прежнему не имеет возможности получать определенные теги или версии.Подробнее о том, как работает вендор: понимание и использование папки vendor
Модули в Go 1.11
Go 1.11 выпустил экспериментальные функции, называемые модулями, для улучшения управления зависимостями, они надеются выпустить их как стабильные в Go 1.12: Информация о модулях в Go 1.11
источник
go mod
доступен сейчас.Для тех, кому нужно создать двоичный файл определенного тега , вот мой способ:
mkdir temp cd temp go mod init . go get -d -v github.com/nsqio/nsq@v1.1.0 mkdir bin go build -o bin/nsqd.exe github.com/nsqio/nsq/apps/nsqd
Пояснение:
nsqd
.go mod init .
создаетgo.mod
файл в текущем каталоге, что позволяет использовать егоgo get
с ревизией / тегами. (см. эту ссылку )-d
означает «только загрузка», если вы хотите прямую установку, опустите этот флаг и команды сборки под этой строкой.-v
означает «быть многословным».bin/nsqd.exe
наbin/nsqd
.Загруженный модуль хранится в формате
%GOPATH%\pkg\mod
. Если вы не хотите загрязнять свойGOPATH
каталог, создайте новый и установитеGOPATH
его.источник
go mod init
требуется идентификатор модуля, напримерgo mod init local/build
Я добился успеха в этом:
источник
go get -d <git-url>
просто загрузить пакеты и пропустить установку.Этот вопрос предшествует модулям Go, но для справки в будущем правильная процедура в Go 1.11 для получения конкретной версии такова:
go get github.com/influxdb@[version]
Или получить конкретный тег git:
go get github.com/influxdb@[gitref]
источник
У меня есть (несколько хакерский, но рабочий) подход к решению этой проблемы, по крайней мере, для репозиториев git: поскольку пакеты go get'ed являются обычными репозиториями системы управления версиями, можно проверить теги с помощью обычных инструментов git (можно использовать git из командной строки , Я использую Atlassian SourceTree).
Чтобы поделиться конфигурацией моего пакета с товарищами по команде, я создал репозиторий git из моего GOPATH . Затем я добавил все пакеты (по крайней мере, те, которыми я хотел управлять таким образом) в это репо как подмодуль git. Это требует, чтобы вы переместили существующие папки репо в сторону и повторно добавили их как подмодуль git, чтобы не путать git. Этот процесс несколько утомительный, но он того стоит:
Теперь я могу фиксировать и загружать свое GOPATH-репо каждый раз, когда использую новый пакет go. Когда мои товарищи по команде извлекают из этого репо и выпускают обновление подмодуля git (или просто обновляют через SoureTree, который делает это автоматически), их версия пакета проверяется по тому же тегу, что и моя.
Конечно, это работает только для пакетов с системой контроля версий git ...
источник
Плагин maven golang позволяет играть с веткой, тегом и ревизией во время GET, вы можете взглянуть на его тест для таких случаев с репозиторием GIT
источник