Estoy buscando la forma de $ go get
trabajar con un repositorio privado, después de muchos intentos de Google.
El primer intento:
$ go get -v gitlab.com/secmask/awserver-go
Fetching https://gitlab.com/secmask/awserver-go?go-get=1
https fetch failed.
Fetching http://gitlab.com/secmask/awserver-go?go-get=1
Parsing meta tags from http://gitlab.com/secmask/awserver-go?go-get=1 (status code 200)
import "gitlab.com/secmask/awserver-go": parse http://gitlab.com/secmask/awserver-go?go-get=1: no go-import meta tags
package gitlab.com/secmask/awserver-go: unrecognized import path "gitlab.com/secmask/awserver-go
Sí, no vio las metaetiquetas porque no podía saber cómo proporcionar información de inicio de sesión.
El segundo intento:
Siga https://gist.github.com/shurcooL/6927554 . Agregue config a .gitconfig.
[url "ssh://[email protected]/"]
insteadOf = https://gitlab.com/
$ go get -v gitlab.com/secmask/awserver-go --> not work
$ go get -v gitlab.com/secmask/awserver-go.git --> work but I got src/gitlab.com/secmask/awserer-go.git
Sí, funciona, pero con la .git
extensión con el nombre de mi proyecto, puedo cambiarle el nombre a original, pero hacerlo cada vez $ go get
que no es tan bueno, ¿hay alguna otra manera?
GOPRIVATE
también. por ejemploexport GOPRIVATE="github.com/steelx/that-private-repo"
Respuestas:
Tienes una cosa para configurar. El ejemplo se basa en GitHub pero esto no debería cambiar el proceso:
fuente
cat
comando es solo para verificar.La forma correcta es colocar manualmente el repositorio en el lugar correcto. Una vez que el repositorio esté allí, puede usarlo
go get -u
para actualizar el paquete ego install
instalarlo. Un paquete llamadoentra en
Los comandos que escribe son:
fuente
go get
está diseñado como una herramienta para el caso común. El equipo de Go decidió explícitamente no agregar capacidad de configuración para que las personas se adhieran a los estándares en lugar de lanzar su propia ruft. Nunca se hizo para el caso que tiene (es decir, repositorios privados).Tuve un problema con el
go get
uso del repositorio privado en gitlab de nuestra empresa. Perdí unos minutos tratando de encontrar una solución. Y encontré este:Necesita obtener un token privado en:
https://gitlab.mycompany.com/profile/account
Configure su git para agregar un encabezado adicional con su token privado:
Configure su git para convertir solicitudes de http a ssh :
Finalmente puedes usar tu
go get
normalmente:fuente
http.extraheader
. +1--global
también enviar su ficha privado a otro servidor git en caso de que el uso de muchas de recompra? algún riesgo seguro?Todo lo anterior no funcionó para mí. Clonar el repositorio funcionaba correctamente, pero todavía recibía un
unrecognized import
error.Como significa Go v1.13, encontré en el documento que deberíamos usar la variable GOPRIVATE env de esta manera:
fuente
Si ya tiene git usando SSH, esta respuesta de Ammar Bandukwala es una solución simple:
$ go get
utilizagit
internamente. Los siguientes revestimientos harángit
y, en consecuencia,$ go get
clonarán su paquete a través de SSH.Github
BitBucket:
fuente
Eso se parece al problema GitLab 5769 .
Se supone que debe resolverse en " Soporte agregado para la recuperación del repositorio de Go. # 5958 ”, siempre que las metaetiquetas correctas estén en su lugar .
Aunque todavía hay un problema para Go: "
cmd/go
: go get no puede descubrir metaetiquetas en documentos HTML5 ".fuente
go get
pueden ver metaetiquetas sin iniciar sesión)go get
comando se verágo get gitlab.com/secmask/awserver-go.git.git
(pedirá autenticación básica http), que tampoco se ve bien.Genere un token github oauth aquí y exporte su token github como una variable de entorno:
Establezca git config para usar la url de autenticación básica:
Ahora puedes
go get
tu repositorio privado.fuente
He creado una configuración ssh específica del usuario, por lo que mi usuario inicia sesión automáticamente con las credenciales y la clave correctas.
Primero necesitaba generar un par de claves
y lo guardé en eg
~/.ssh/id_my_domain
. Tenga en cuenta que este es también el par de claves (privado y público) que he conectado a mi cuenta de Github, por lo que el mío se almacena en~/.ssh/id_github_com
.Luego he creado (o alterado) un archivo llamado
~/.ssh/config
con una entrada:En otro servidor, el "ssh-url" es
[email protected]:username/private-repo.git
y la entrada para este servidor habría sido:Solo para aclarar que necesita asegurarse de que
User
,Host
yHostName
esté configurado correctamente.Ahora puedo simplemente buscar en la ruta de acceso y luego
go get <package>
, por ejemplo,go get main
donde el archivomain/main.go
incluye el paquete (del último ejemplo anterior)domain.com:username/private-repo.git
.fuente
go get hostname.com/username/repo.git
(la extensión .git es crucial)..git
y por qué sucede?.git
extensión era que en mi configuración de Git localgit config --global url."[email protected]:".insteadOf "https://gitlab.myserver.com/"
, pero el subdominiogitlab.myserver.com
no tiene la certificación SSL, así que utilizohttp
en lugar dehttps
, por ahoraMe encontré con
.netrc
y lo encontré relevante para esto.Cree un archivo
~/.netrc
con el siguiente contenido:¡Hecho!
Además, para las últimas versiones de GO, es posible que deba agregar esto a las variables de entorno
GOPRIVATE=github.com
(lo he agregado a mi.zshrc
)netrc
también mejora la configuración de mi entorno de desarrollo ya que mi acceso github personal para HTTPS se ha configurado ahora para usarse en toda la máquina (al igual que mi configuración SSH).Genere tokens de acceso personal de GitHub: https://github.com/settings/tokens
Si desea seguir con la autenticación SSH, enmascare la solicitud para usar ssh con fuerza
git config --global url."[email protected]:".insteadOf "https://github.com/"
Más métodos para configurar el acceso git: https://gist.github.com/technoweenie/1072829#gistcomment-2979908
Consulte la página de manual y esta respuesta para su uso con Git en Windows específicamente
fuente
Para mí, las soluciones ofrecidas por otros todavía dieron el siguiente error durante
go get
Lo que requería esta solución
Como lo han dicho otros:
git config --global url."[email protected]:".insteadOf "https://github.com/"
Eliminar la frase de contraseña de mi
./ssh/id_rsa
clave que se usó para autenticar la conexión al repositorio. Esto se puede hacer ingresando una contraseña vacía cuando se le solicite como respuesta a:ssh-keygen -p
Por que esto funciona
Esta no es una solución alternativa, ya que siempre es mejor tener una frase de contraseña en su clave privada, pero estaba causando problemas en algún lugar dentro de OpenSSH.
go get
usa internamente git, que usa openssh para abrir la conexión. OpenSSH toma los certificados necesarios para la autenticación de.ssh/id_rsa
. Al ejecutar comandos git desde la línea de comandos, un agente puede encargarse de abrir el archivo id_rsa por usted para que no tenga que especificar la frase de contraseña cada vez, pero cuando se ejecuta en el estómago de go get, esto no funcionó en mi caso. OpenSSH desea solicitarle una contraseña, pero como no es posible debido a cómo se llamó, imprime en su registro de depuración:Y simplemente falla. Si elimina la frase de contraseña del archivo de clave, OpenSSH accederá a su clave sin ese aviso y funciona
Esto podría ser causado por Ir a buscar módulos simultáneamente y abrir múltiples conexiones SSH a Github al mismo tiempo (como se describe en este artículo ). Esto está algo respaldado por el hecho de que el registro de depuración de OpenSSH mostró que la conexión inicial al repositorio fue exitosa, pero luego lo intentó nuevamente por alguna razón y esta vez optó por pedir una frase de contraseña.
Sin embargo, la solución de usar multiplexación de conexión SSH como se presenta en el artículo mencionado no funcionó para mí. Para el registro, el autor sugirió agregar la siguiente configuración al archivo de configuración ssh para el host afectado:
Pero como se dijo, para mí no funcionó, tal vez lo hice mal
fuente