¿Cuál es la forma más efectiva de bloquear las "versiones" de dependencia externa en Golang?
(5)
Hay un proyecto para ayudarlo a administrar sus dependencias. Comprobar gopack
De forma predeterminada, Go extrae las dependencias importadas al tomar la última versión en master (github) o por defecto (mercurial) si no puede encontrar la dependencia en su GOPATH. Y aunque este flujo de trabajo es bastante fácil de comprender, se ha vuelto algo difícil de controlar de manera estricta. Debido a que todo cambio de software conlleva cierto riesgo, me gustaría reducir el riesgo de este cambio potencial de una manera manejable y repetible y evitar captar inadvertidamente los cambios de una dependencia, especialmente cuando se ejecutan compilaciones limpias a través del servidor de CI o se preparan para implementarse.
¿Cuál es la forma más efectiva en la que puedo fijar (es decir, bloquear o capturar) una dependencia de paquete para que no pueda reproducir un paquete antiguo, o lo que es peor, se rompe inesperadamente cuando estoy a punto de lanzarlo?
---- Actualización ----
Información adicional sobre el estado actual del embalaje Go . Mientras terminé (a partir de 7.20.13) capturando dependencias en una carpeta de terceros y administrando actualizaciones (ala Camlistore), todavía estoy buscando una mejor manera ...
Aquí hay una gran lista de opciones .
Además, asegúrese de ver el proveedor / experimento de go 1.5 para obtener información sobre cómo ir a solucionar el problema en futuras versiones.
Los repositorios de terceros están completamente bajo su control. Sugerencia de clones ''go get'', tienes razón, pero puedes revisar cualquier revisión del repositorio clonado-por-ir-obtener-clonado por ti. Mientras no hagas ''go get -u'', nada toca tus repositorios de terceros que ya están en tu disco duro.
Efectivamente, sus dependencias externas, clonadas localmente, siempre están bloqueadas por defecto.
No hay herramientas integradas para esto en marcha. Sin embargo, puede bifurcar las dependencias usted mismo en un disco local o en un servicio en la nube y solo fusionar los cambios en sentido ascendente una vez que los haya examinado.
Podrías encontrar la forma en que Camlistore hace interesante.
Consulte el directorio de terceros y, en particular, el update.pl
y rewrite-imports.sh
. Estos scripts actualizan los repositorios externos, modifican las importaciones si es necesario y se aseguran de que una versión estática de los repositorios externos esté marcada con el resto del código de la lista de claves.
Esto significa que camlistore tiene una construcción completamente repetible, ya que es independiente, pero los componentes de terceros se pueden actualizar bajo el control de los desarrolladores de camlistore.
Godep
Comencé a usar godep principios del año pasado (2014) y godep muy contento con él ( cumplió con las inquietudes que mencioné en mi pregunta original ). Ya no uso scripts personalizados para administrar la venta de dependencias, ya que Godep solo se ocupa de ello. Ha sido excelente para garantizar que no se introduzca ninguna desviación, independientemente de la temporización o del estado del paquete de una máquina. Funciona con el mecanismo existente de go get
e introduce la capacidad de anclar ( godep save
) y restaurar ( godep restore
) basado en Godeps / godeps.json.
Echale un vistazo: