Tudo bem, isso é estranho. Primeiro, é uma execução simples no cygwin atualizado, com o git retirado do setup.exe do cygwin. Estou executando o zsh.
$ git clone https://<user>@<domain>/<repository>/ ~/src/project/dev
Initialized empty Git repository in /cygdrive/c/src/project/dev/.git/
Password: <actual password in plain text appears>
# Nothing happens...
^C
$ <password text that I just typed>
zsh: command not found: <same password text>
O que está acontecendo aqui? Esse é um problema terminal, um problema de shell, um problema de git ou um problema de cygwin?
Atualização: Sim, estou executando a versão git do Cygwin, não a versão do Windows:
$ which git
/usr/bin/git
$ git --version
git version 1.7.1
$ /cygdrive/c/Program\ Files\ \(x86\)/Git/bin/git.exe --version
git version 1.7.0.2.msysgit.0
^C
sugere que os caracteres não estão ' sendo enviado para o stdin do processo git. Mas não sei qual pode ser o problema específico.Respostas:
OK, acho que encontrei uma solução definitiva.
O problema é que, independentemente do terminal usado (puttycyg, mintty, cmd.exe), o Git, por padrão, na ausência de alternativas melhor configuradas, tenta usar um "prompt de senha simples" (como você pode ler na descrição de
core.askpass
opção de configuração ).O prompt de senha simples aparentemente funciona apenas no UNIX real, mas não no Cygwin.
A solução é instalar um programa compatível com SSH_ASKPASS para Windows e configurar o Git para usá-lo.
O que eu fiz foi:
git config --global core.askpass "C:/win_ssh_askpass.exe"
. Observe que o arquivo EXE possui sublinhados em seu nome, não sinais de menos.https://<user>@<domain>/<repository>
). Caso contrário, o Git solicitará o login antes de solicitar a senha, usando o mesmo utilitário askpass. Você pode, sem saber, digitar sua senha como o login, que será enviado ao administrador da Web e registrado em seu log de acesso como texto sem formatação!Agora, o Git pede a senha usando uma janela elegante da interface gráfica do usuário e funciona independentemente do terminal usado :)
fonte
Eu experimentei o mesmo problema - no entanto, no meu caso, tenho SSH no servidor Cygwin, portanto, obviamente, um askpass da GUI do Win32 não funcionará.
Em vez disso, escrevi esse script simples para fazer o askpass. Eu pensei que poderia ser usado a partir de avisos regulares, obtendo o dispositivo tty de
/bin/tty.exe
mas isso não funcionou por um motivo desconhecido (sinta-se à vontade para tentar você mesmo ou procurar outra solução para obtê-lo, talvez eu tenha entendido errado de alguma maneira )/bin/askpass.sh:
Verifique se esse script é executável e use-o como a configuração core.askpass do seu git. Como esse script depende da variável $ SSH_TTY, normalmente funcionará apenas no SSH. No entanto, você pode definir $ SSH_TTY em
.bashrc
ou.bash_profile
se não estiver definido ; Dessa forma, ele deve funcionar mesmo em um console. A seguinte linha no seu script rc deve fazer isso:fonte
As soluções acima não funcionam para mim, mas encontrei outra.
você tem que executar o agente ssh
basta adicionar ao ~ / .bashrc e reiniciar o console
O PS Chrome e o Opera usam quebra de linha que não é compatível com o bash - basta usar outro navegador para copiar e colar
fonte
É possível que você tenha um metacaractere, como
&
, no URL. Isso faria com que o git fosse executado em segundo plano e, em um sistema Unix, ele seria interrompido assim que tentasse ler do stdin. A;
também encerraria o comando no meio da linha eCtrl-C
faria com que o restante da linha (um comando separado) fosse abortado.É interessante que
git
inicialize o repositório/cygdrive/c/src/project/dev/.git/
mesmo que você tenha solicitado a usá-lo~/src/project/dev
(a menos que você tenha seu diretório pessoal em um local estranho). Isso sugere que ogit
comando não está vendo o restante da linha de comando, o que aconteceria se houvesse uma mensagem perdida&
ou;
na URL.(Eu já tive esse problema muitas vezes
wget
, embora não comgit
.)Experimente um
git clone
de um repositório diferente ou use um transporte diferente do mesmo repositório, para ver segit
há uma confusão geral ou apenas para esse repositório. Você também pode tentar colocar aspas simples ao redor do URL.fonte
~/src
é um link simbólico para/cygdrive/c/src
(C:\src
). Não há&
no URL. Vou tentar clonar um repositório git pública, mas geralmente aqueles que não terá uma senha ...Dê uma olhada no seguinte problema - tenho quase certeza de que agora é apenas uma limitação da hortelã e da interoperabilidade com o Windows.
Edição 56 - mintty
Eu também tive problemas ao executar o mysql e outros do mintty - então, a resposta é que é um problema de emulação de terminal.
fonte
A pergunta já foi respondida ... Gostaria de adicionar como eu corrigi:
Verificando o Windows
Git Bash
, pude ver essegit
conjunto a seguirSSH_ASKPASS
Então, no Cygwin, adicionei a mesma variável ao
.bashrc
ou
Fazendo isso, o git abre o SSH_ASKPASS do Git ... Não tive que instalar nenhum SW adicional nem criar nenhum script adicional.
Espero que isso possa ajudar!
fonte
Anos atrás, lembro-me de ter alguns problemas com a autenticação CVS do Cygwin ... era sobre a instalação do Cygwin com as terminações de linha de estilo DOS ou Unix (CRLF vs apenas LF); é uma das opções na caixa de diálogo do instalador. Se você escolhesse a pessoa errada (acho que foi o DOS que funcionou), a senha acabaria mutilada ou com um caráter falso ou algo assim.
De qualquer forma, pode valer a pena tentar a outra opção.
fonte
Eu tenho o mesmo problema, e, ao contrário desta linha , o problema ocorre com Cygwin GIT em todos os terminais possíveis -
puttycyg
,mintty
e o clássico do Windowscmd.exe
.Ainda estou procurando uma solução adequada, mas há uma solução alternativa - embora seja muito insegura, você pode tentar colocar a senha no URL do repositório, por exemplo:
A solução alternativa funciona para você?
fonte
Se é um repositório usado com freqüência, a coisa mais fácil pode ser criar um arquivo ~ / .netrc com
Obviamente, você deve definir permissões draconianas apropriadas no arquivo.
fonte
Apenas um refinamento no comentário # 2
Há um cygwin ssh-ask-pass (não oficial) aqui
Basta baixar o tar.bz2 e descompactar na sua pasta cygwin. Ele funciona sem instalar o borland delphi runtime.
fonte