vá obter resultados no erro 'prompts de terminal desativados' para repositório particular do github


187

Criei o repositório de exemplos de repositório particular / myprivaterepo usando a interface do usuário do Github no meu navegador.

Depois fui ao meu diretório go (na área de trabalho) e o clonei:

$ cd $GOPATH
$ go get github.com/examplesite/myprivaterepo

Por enquanto, tudo bem. Criado o arquivo scheduler.go, adicionado ao repositório e enviado por push.

$ vim scheduler.go
$ git add scheduler.go
$ git commit
$ git push

Está tudo bem. Mas quando fui a um laptop limpo e tentei clonar o repositório, recebi um erro:

# Now on laptop, which doesn't yet know about the repo
$ cd $GOPATH
$ go get github.com/examplesite/myprivaterepo
# At this point it should ask for my user ID and password ,right? But it doesn't.
# Instead, this error occurs:
cd .; git clone https://github.com/examplesite/myprivaterepo /Users/tom/go/src/github.com/examplesite/myprivaterepo
Cloning into '/Users/tom/go/src/github.com/examplesite/myprivaterepo'...
fatal: could not read Username for 'https://github.com': terminal prompts disabled
package github.com/examplesite/myprivaterepo: exit status 128

Por que meu laptop está odiando meu próprio repositório e como posso aceitá-lo? Obrigado.


10
Isso não é um goerro, gitestá retornando "prompts de terminal desativados". Você pode rodar git clone https://github.com/examplesite/myprivaterepono seu laptop?
JimB

1
Obrigado. O clone do git funcionou. Em seguida, comece a trabalhar. Qual é o problema? Eu tenho que "escorvar a bomba" assim toda vez ou confundi alguma coisa?
tomcam

1
@tomcam, você pode adicionar chaves ssh para a conta github e ir get irá funcionar desde o início, ver help.github.com/articles/generating-ssh-keys
alex vasi

@alexvasi: isso só funciona se ele clonar o repositório primeiro no ssh, pois ele solicitará https://github.com/se o caminho de importação não existir. O processo git deve ser capaz de prompt para o nome de usuário / senha, então deve haver algo diferente na configuração laptop - shell diferente, .gitconfig diferente, uma variável env, etc.
JimB

Tudo isso me ajudou, mas não tenho certeza de como marcar como respondida e / ou resolvida. Aqui está o que eu tenho até agora.
tomcam

Respostas:


175

go get desativa o "prompt do terminal" por padrão. Isso pode ser alterado definindo uma variável de ambiente git:

env GIT_TERMINAL_PROMPT=1 go get github.com/examplesite/myprivaterepo

307

Achei isso extremamente útil e resolveu meu problema. Este comando permitirá que o 2FA faça o que quiser (e poupe o trabalho de digitar seu nome de usuário e senha):

git config --global --add url."git@github.com:".insteadOf "https://github.com/"

Fonte: http://albertech.blogspot.com/2016/11/fix-git-error-could-not-read-username.html

Se você não estiver usando o 2FA, ainda poderá usar o SSH e isso funcionará.

Editar: adicionada a --addbandeira como sugerido por slatunje .


12
Eu recomendo acrescentando --add bandeira de modo que você não substituir as configurações existentes você pode ter, por exemplo:git config --global --add url."git@github.com:".insteadOf "https://github.com/"
slatunje

Obrigado slatunje, adicionou a bandeira à minha resposta com base nos seus comentários.
Wylliam Judd

5
Esta é a melhor solução IMO. É mais seguro e menos esforço (uma vez setup) para usar as chaves SSH para autenticação em vez de nome de usuário / senha
Bodecker

1
Não faça isso no Windows. Acabei com erro git@github.com: Permission denied (publickey). fatal: Could not read from remote repository..
Shital Shah

1
funciona para linux também. deve funcionar para todos se você estiver usando ssh globaly
Chiptus

39

1º - go getrecusará a autenticação na linha de comando. Portanto, você precisa armazenar em cache as credenciais no git. Como eu uso o osx, posso usar o auxiliar de credenciais osxkeychain.

2º Para mim, tenho o 2FA ativado e, portanto, não pude usar minha senha para autenticação. Em vez disso, tive que gerar um token de acesso pessoal para usar no lugar da senha.

  1. assistente de credencial da configuração osxkeychain https://help.github.com/articles/caching-your-github-password-in-git/
  2. Se estiver usando o TFA em vez de usar sua senha, gere um token de acesso pessoal com escopo de repositório https://github.com/settings/tokens
  3. O git git clone https://github.com/user/private_repo clona um repositório particular apenas para que ele armazene em cache a senha e usou seu nome de usuário github.com como nome de usuário e o token de acesso pessoal gerado para senha.
  4. Removido o repositório recém-clonado e testado novamente para garantir que os creds fossem armazenados em cache - git clone https://github.com/user/private_repoe dessa vez não foram solicitados.

    1. go get funcionará com quaisquer repositórios que o token de acesso pessoal possa acessar. Pode ser necessário repetir as etapas com outras contas / tokens, pois as permissões variam.

1
Eu tenho o 2FA e isso funcionou para mim - gerou um token (com privs completos), fiz git cloneum dos meus próprios repositórios existentes (é público na verdade), foi solicitado o meu username, coloque meu nome de usuário no GitHub e, em seguida, coloque o token gerado para password- excluiu o repositório clonado, depois execute novamente o go getcomando e tudo estava bem - obrigado! (OSX aqui também)
Eric Dorsey

3
Isso também é ótimo porque você pode limitar o escopo do token para "ler" apenas para repositórios particulares, mesmo que, de alguma forma, apareça em uma imagem, eles podem apenas ler seu código e não colocar as coisas nele e você pode revogue o token com muita facilidade. Não me lembro se eles têm validade automática incorporada ainda.
dragon788

16

Se você quer go gettrabalhar muito rápido e seguir em frente com o seu trabalho ...

Apenas exporte GIT_TERMINAL_PROMPT=1

$ export GIT_TERMINAL_PROMPT=1
$ go get [whatever]

Agora, você será solicitado a fornecer um usuário / passe para o restante da sua sessão do shell. Coloque isso no seu .profileou configure gitcomo acima para obter uma solução mais permanente.


16

Ele reclama porque precisa usar em sshvez de, httpsmas seu git ainda está configurado com https. Então, basicamente, como outros mencionados anteriormente, você precisa ativar os prompts ou configurar o git para usar em sshvez de https. uma maneira simples de fazer isso executando o seguinte:

git config --global --add url."git@github.com:".insteadOf "https://github.com/"

ou se você já usa sshcom gitem sua máquina, você pode com segurança editar ~/.gitconfige adicionar a seguinte linha na parte inferior

Nota: Isso abrange todo o SVC, controle de versão de origem, que depende exatamente do que você usa exatamente (github, gitlab, bitbucket)

# Enforce SSH
[url "ssh://git@github.com/"]
  insteadOf = https://github.com/
[url "ssh://git@gitlab.com/"]
        insteadOf = https://gitlab.com/
[url "ssh://git@bitbucket.org/"]
  insteadOf = https://bitbucket.org/
  • Se você deseja manter as pompas de senha desativadas, é necessário armazenar em cache a senha. Para obter mais informações sobre como armazenar em cache sua senha do github no mac, windows ou linux, visite esta página .

  • Para obter mais informações sobre como adicionar ssh à sua conta do github, visite esta página .

Além disso, o mais importante é que, se este é um repositório particular para uma empresa ou para você, pode ser necessário pular o uso de banco de dados proxy ou de soma de verificação para esses repositórios, para evitar expô-los publicamente.

Para fazer isso, você precisa definir GOPRIVATEa variável de ambiente que controla quais módulos o comando go considera privados (não disponíveis publicamente) e, portanto, NÃO deve usar o banco de dados de proxy ou soma de verificação.

A variável é uma lista de padrões separados por vírgula (mesma sintaxe de Go's path.Match) de prefixos de caminho do módulo. Por exemplo,

export GOPRIVATE=*.corp.example.com,github.com/mycompany/*

Ou

go env -w GOPRIVATE=github.com/mycompany/*
  • Para obter mais informações sobre como resolver problemas de validação de soma de verificação de pacotes / módulos particulares, leia este artigo .
  • Para obter mais informações sobre os módulos go 13 e novos aprimoramentos, consulte as notas de versão dos módulos Go 1.13 .

Uma última coisa a não esquecer de mencionar, você ainda pode configurar go getpara autenticar e buscar https; tudo o que você precisa fazer é adicionar a seguinte linha ao$HOME/.netrc

machine github.com login USERNAME password APIKEY

Espero que isso ajude a comunidade e economize tempo de outras pessoas para resolver rapidamente os problemas descritos. sinta-se à vontade para deixar um comentário caso queira mais suporte ou ajuda.


GOPRIVATE( go env -w GOPRIVATE=github.com/mycompany/*) é a única coisa que funcionou para mim. Eu poderia sugerir colocar isso sob seu próprio cabeçalho ou mesmo em uma resposta própria para destacá-lo um pouco mais.
Bernhard Barker

1

Se você configurar seu gitconfig com esta opção, mais tarde terá um problema ao clonar outros repositórios do GitHub

git config --global --add url. "Git@github.com". Instead, "https://github.com/"

Em vez disso, recomendo que você use esta opção

echo "export GIT_TERMINAL_PROMPT=1" >> ~/.bashrc || ~/.zshrc

e não se esqueça de gerar um token de acesso do seu repositório privado. Quando solicitado a digitar sua senha, basta colar o token de acesso. Happy clone :)


0

Eu tive o mesmo problema no Windows "erro: falha ao executar o script de prompt (código de saída 1) fatal: não foi possível ler o nome de usuário para ' https://github.com ': sem erro" ao tentar fazer login no github através da caixa de diálogo de login. Quando cancelei a caixa de diálogo, o git me pediu login e senha na linha de comando e funcionou bem.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.