Estoy intentando compilar la base de datos InfluxDB (versión v0.8.8) usando go get github.com/influxdb/influxdb
Pero esto tira de la rama maestra y necesito la v0.8.8
etiqueta.
He intentado hacer: go get github.com/influxdb/influxdb/releases/tag/v0.8.8
pero esto falla diciendo que no se puede encontrar.
También he intentado hacer un habitual go get
de la rama principal, y luego comprobar manualmente usando la etiqueta git
en GOPATH/src/github...
el fin de establecer la versión corret.
El problema con el último enfoque es que cuando trato de extraer las dependencias go get -u -f ./...
, intenta encontrarlas en la rama maestra, y algunas de ellas no existen en la rama maestra ...
TL; DR : realiza go get
en una etiqueta github específica y extrae las dependencias correctas.
go get
, no cómo crear una.Respuestas:
No es posible utilizar la
go get
herramienta. En su lugar, debe utilizar una herramienta de administración de paquetes Go de terceros o crear sus propias bifurcaciones para los paquetes que desea administrar de manera más detallada.Hablé con un tipo que trabaja en Google y reconoció este problema / requisito, dijo que los proveedores que usaba su equipo eran voluminosos y probablemente lo resolverán pronto con las herramientas oficiales.
Lee mas:
Vendiendo en Go 1.6
Vendoring se ha liberado de la versión experimental en go 1.6 (después de que se escribió inicialmente esta publicación) que facilita el proceso de uso de etiquetas / versiones específicas de paquetes con herramientas de terceros.
go get
todavía no tiene la funcionalidad para buscar etiquetas o versiones específicas.Más sobre cómo funciona el proveedor : Comprensión y uso de la carpeta de proveedores
Módulos en Go 1.11
Go 1.11 ha lanzado características experimentales llamadas módulos para mejorar la gestión de dependencias, esperan lanzarlo como estable en Go 1.12: Información sobre módulos en Go 1.11
fuente
go mod
ya está disponible.Para aquellos que necesitan construir un binario de una etiqueta específica , aquí está mi camino:
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
Explicación:
nsqd
.go mod init .
crea ungo.mod
archivo en el directorio actual, que permite usarlogo get
con etiquetas revision /. (ver este enlace )-d
significa "sólo descargar", si desea una instalación directa, omita este indicador y los comandos de compilación debajo de esta línea.-v
significa "ser detallado".bin/nsqd.exe
conbin/nsqd
.El módulo descargado se almacena en
%GOPATH%\pkg\mod
. Si no desea contaminar suGOPATH
directorio, cree uno nuevo y configúreloGOPATH
.fuente
go mod init
necesita una identificación de módulo, por ejemplogo mod init local/build
He tenido éxito con esto:
fuente
go get -d <git-url>
para descargar los paquetes y omitir la instalación.Esta pregunta es anterior a los módulos Go, pero para referencia futura, el procedimiento correcto en Go 1.11 para obtener una versión específica es el siguiente:
go get github.com/influxdb@[version]
O para obtener una etiqueta git específica:
go get github.com/influxdb@[gitref]
fuente
Tengo un enfoque (algo pirateado, pero funcional) para abordar este problema, al menos para los repositorios de git: a medida que los paquetes go get'ed son repositorios de control de código fuente normales, uno puede verificar las etiquetas usando herramientas git normales (podría usar git desde la línea de comando , Estoy usando Atlassian SourceTree).
Para compartir la configuración de mi paquete con mis compañeros de equipo, hice un repositorio git de mi GOPATH . Luego agregué todos los paquetes (al menos los que quería administrar de esta manera) a este repositorio como submódulo git. Esto requiere que mueva las carpetas de repositorio existentes fuera del camino y vuelva a agregarlas como submódulo git, para no confundir git. Este proceso es algo tedioso, pero ha demostrado que merece la pena:
Ahora puedo enviar y enviar a mi GOPATH-repo cada vez que uso un nuevo paquete Go. Cuando mis compañeros de equipo obtienen de este repositorio y emiten una actualización de submódulo de git (o simplemente actualizan a través de SoureTree, que lo hace automáticamente), su versión del paquete se comprueba en la misma etiqueta que la mía.
Por supuesto, esto solo funciona para paquetes bajo el control de fuente git ...
fuente
El complemento maven golang permite jugar con la rama, la etiqueta y la revisión durante GET, puede echar un vistazo a su prueba para tales casos con el repositorio GIT
fuente