Estou procurando a maneira de começar a $ go get
trabalhar com repositório privado, depois de muitas tentativas no google.
A primeira tentativa:
$ 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
Sim, ele não viu as metatags porque eu não sabia como fornecer informações de login.
A segunda tentativa:
Siga https://gist.github.com/shurcooL/6927554 . Adicione a configuração ao .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
Sim, funciona, mas com a .git
extensão com o nome do meu projeto, posso renomeá-lo para original, mas sempre que $ go get
não é tão bom, existe outro caminho?
GOPRIVATE
também. por exemploexport GOPRIVATE="github.com/steelx/that-private-repo"
Respostas:
Você tem uma coisa para configurar. O exemplo é baseado no GitHub, mas isso não deve alterar o processo:
fonte
cat
comando é apenas para verificação.A maneira correta é colocar manualmente o repositório no lugar certo. Quando o repositório estiver lá, você poderá usar
go get -u
para atualizar o pacote ego install
instalá-lo. Um pacote chamadoentra em
Os comandos que você digita são:
fonte
go get
foi desenvolvido como uma ferramenta para o caso comum. A equipe do Go decidiu explicitamente não adicionar a configurabilidade para que as pessoas aderissem aos padrões em vez de lançar seu próprio cruft. Nunca foi feito para o caso que você possui (por exemplo, repositórios particulares).Eu tive um problema ao
go get
usar o repositório privado no gitlab da nossa empresa. Perdi alguns minutos tentando encontrar uma solução. E eu encontrei este:Você precisa obter um token particular em:
https://gitlab.mycompany.com/profile/account
Configure seu git para adicionar cabeçalho extra com seu token privado:
Configure seu git para converter solicitações de http para ssh :
Finalmente, você pode usar o seu
go get
normalmente:fonte
http.extraheader
. +1--global
também enviar seu token privada para outro servidor git no caso de você usar muitos repo? algum risco seguro?Todas as opções acima não funcionaram para mim. A clonagem do repositório estava funcionando corretamente, mas eu ainda estava recebendo um
unrecognized import
erro.Como significa Go v1.13, descobri no documento que devemos usar a variável env GOPRIVATE da seguinte forma:
fonte
Se você já possui o git usando SSH, esta resposta de Ammar Bandukwala é uma solução simples:
$ go get
usagit
internamente. Os seguintes liners farãogit
e, consequentemente,$ go get
clonarão seu pacote via SSH.Github:
BitBucket:
fonte
Parece o problema do GitLab 5769 .
Ele deve ser resolvido em “ Suporte adicionado para recuperação de repositório do Go. Nº 5958 ", desde que as metatags corretas estejam no lugar .
Embora ainda exista um problema para o Go: “
cmd/go
: o get get não pode descobrir a meta tag nos documentos HTML5 ”.fonte
go get
pode ver meta tags sem login)go get
comando será parecidogo get gitlab.com/secmask/awserver-go.git.git
(pedirá a autenticação básica do http), o que também não parecerá bom.Gere um token oith do github aqui e exporte o token do github como uma variável de ambiente:
Defina git config para usar o URL de autenticação básico:
Agora você pode
go get
seu repositório particular.fonte
Eu criei um ssh-config específico do usuário, para que o usuário efetue login automaticamente com as credenciais e a chave corretas.
Primeiro eu precisei gerar um par de chaves
e salvou para, por exemplo
~/.ssh/id_my_domain
. Observe que este também é o par de chaves (privado e público) que eu conectei à minha conta do Github, então a minha é armazenada~/.ssh/id_github_com
.Eu criei (ou alterei) um arquivo chamado
~/.ssh/config
com uma entrada:Em outro servidor, o "ssh-url" é
[email protected]:username/private-repo.git
e a entrada para este servidor seria:Apenas para esclarecer que você precisa garantir que o
User
,Host
eHostName
está definido corretamente.Agora posso apenas navegar no caminho ir e
go get <package>
, por exemplo,go get main
onde o arquivomain/main.go
inclui o pacote (do último exemplo acima)domain.com:username/private-repo.git
.fonte
go get hostname.com/username/repo.git
(a extensão .git é crucial)..git
e por que isso acontece?.git
extensão que era na minha configuração git localgit config --global url."[email protected]:".insteadOf "https://gitlab.myserver.com/"
, mas o subdomíniogitlab.myserver.com
não tem a certificação ssl, então eu uso emhttp
vez dehttps
agoraMe deparei com
.netrc
e achei relevante para isso.Crie um arquivo
~/.netrc
com o seguinte conteúdo:Feito!
Além disso, para as versões mais recentes do GO, talvez seja necessário adicionar isso às variáveis de ambiente
GOPRIVATE=github.com
(eu adicionei ao meu.zshrc
)netrc
também melhora a configuração do meu ambiente de desenvolvimento, já que meu acesso pessoal ao HTTPS no github foi configurado para ser usado em toda a máquina (assim como minha configuração SSH).Gere tokens de acesso pessoal do GitHub: https://github.com/settings/tokens
Se você deseja manter a autenticação SSH, oculte a solicitação para usar o ssh com força
git config --global url."[email protected]:".insteadOf "https://github.com/"
Mais métodos para configurar o acesso ao git: https://gist.github.com/technoweenie/1072829#gistcomment-2979908
Consulte a página do manual e esta resposta para usá-lo especificamente com o Git no Windows
fonte
Para mim, as soluções oferecidas por outros ainda deram o seguinte erro durante
go get
O que esta solução exigia
Como declarado por outros:
git config --global url."[email protected]:".insteadOf "https://github.com/"
Removendo a senha da minha
./ssh/id_rsa
chave que foi usada para autenticar a conexão com o repositório. Isso pode ser feito digitando uma senha vazia quando solicitado como resposta a:ssh-keygen -p
Por que isso funciona
Essa não é uma solução alternativa, pois é sempre melhor ter uma senha na sua chave privada, mas estava causando problemas em algum lugar do OpenSSH.
go get
usa internamente git, que usa openssh para abrir a conexão. O OpenSSH recebe os certificados necessários para autenticação.ssh/id_rsa
. Ao executar comandos git a partir da linha de comando, um agente pode cuidar de abrir o arquivo id_rsa para você, para que você não precise especificar a senha sempre, mas quando executado no ventre de ir buscar, isso não funcionava de alguma maneira no meu caso. O OpenSSH deseja solicitar uma senha, mas como não é possível devido à forma como foi chamada, ela imprime no seu log de depuração:E apenas falha. Se você remover a senha do arquivo de chaves, o OpenSSH acessará sua chave sem esse prompt e funcionará
Isso pode ser causado pelo Go buscar módulos simultaneamente e abrir várias conexões SSH ao Github ao mesmo tempo (conforme descrito neste artigo ). Isso é um pouco suportado pelo fato de o log de depuração do OpenSSH mostrar a conexão inicial com o repositório bem-sucedida, mas mais tarde tentou novamente por algum motivo e, dessa vez, optou por solicitar uma senha.
No entanto, a solução de usar a multiplexação de conexão SSH, conforme apresentado no artigo mencionado, não funcionou para mim. Para o registro, o autor sugeriu adicionar o conf que se reduz ao arquivo de configuração ssh do host afetado:
Mas, como afirmado, para mim não funcionou, talvez eu tenha feito errado
fonte