Cygwin / Git 기괴한 터미널 문제 ~/src/project/dev Initialized empty

좋아, 이상해. 먼저, 이것은 최신 cygwin에서 실행되고 있으며, git은 cygwin의 setup.exe에서 가져옵니다. 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>

무슨 일이야? 이것은 터미널 문제, 쉘 문제, 자식 문제 또는 cygwin 문제입니까?

업데이트 : 예, Windows 버전이 아닌 Cygwin git 버전을 실행하고 있습니다.

$ 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


답변

좋아, 나는 확실한 해결책을 찾았다.

문제는 사용 된 터미널 (puttycyg, mintty, cmd.exe)에 관계없이 Git이 기본적으로 더 나은 대안이없는 경우 “간단한 암호 프롬프트”를 사용하려고 시도한다는 것입니다. core.askpass 구성 옵션 ).

간단한 암호 프롬프트는 분명히 실제 UNIX에서만 작동하지만 Cygwin에서는 작동하지 않습니다.

해결책은 Windows 용 SSH_ASKPASS 호환 프로그램을 설치하고이를 사용하도록 Git을 구성하는 것입니다.

내가 한 일은 :

  1. 포장을 풀고 C : \에 복사하여 win-ssh-askpass 응용 프로그램을 설치하십시오 .
  2. win-ssh-askpass에 필요한 Borland Delphi 5 런타임을 다운로드하여 설치하십시오 (현재는 어렵지만 http://www.satsignal.eu/software/runtime.html 에서 찾을 수 있음 )
  3. win-ssh-askpass :를 사용하여 비밀번호를 얻도록 Git을 구성하십시오 git config --global core.askpass "C:/win_ssh_askpass.exe". EXE 파일의 이름에는 마이너스 부호가 아닌 밑줄이 있습니다.
  4. 하는 것을 잊지 항상 URL에 로그인을 배치 ( https://<user>@<domain>/<repository>). 그렇지 않으면 Git은 동일한 askpass 유틸리티를 사용하여 비밀번호를 요청하기 전에 로그인을 요청합니다. 자신도 모르게 비밀번호를 로그인으로 입력 할 수 있습니다.이 비밀번호는 웹 브라우저로 전송되고 액세스 로그에 일반 텍스트로 기록됩니다!

이제 Git은 우아한 GUI 창을 사용하여 암호를 묻고 사용 된 터미널에 관계없이 작동합니다 🙂


답변

나는 같은 문제를 겪었지만 Cygwin 서버에서 SSH를 사용했기 때문에 Win32 GUI askpass가 작동하지 않습니다.

대신, 나는 askpass를하기 위해이 간단한 스크립트를 작성했다. 나는 tty 장치를 가져 와서 일반 프롬프트에서도 사용할 수 /bin/tty.exe있지만 알 수없는 이유로 작동하지 않았습니다 (자신을 tty하거나 tty를 얻을 수있는 다른 솔루션을 찾으십시오. 어쩌면 잘못되었습니다) ).

/bin/askpass.sh :

#!/bin/bash

TTY=$SSH_TTY
[ -c "$TTY" -a -r "$TTY" -a -w "$TTY" ] \
  || { echo "Failed to open device \`$TTY'!"; exit 1; }
exec <$TTY

echo -n "$@" >$TTY
read -s P
echo >$TTY

echo $P

이 스크립트가 실행 가능한지 확인하고 git의 core.askpass 설정으로 사용하십시오. 이 스크립트는 $ SSH_TTY 변수에 의존하기 때문에 일반적으로 SSH에서만 작동합니다. 그러나 $ SSH_TTY를 설정 .bashrc하거나 .bash_profile설정하지 않은 경우; 이런 식으로 콘솔에서도 작동합니다. rc 스크립트에서 다음 행을 수행해야합니다.

[ -z "$SSH_TTY" ] && export SSH_TTY=$(/bin/tty.exe)

답변

위의 솔루션은 저에게 효과적이지 않지만 다른 솔루션을 찾았습니다.

당신은 ssh 에이전트를 실행해야합니다

~ / .bashrc에 추가하고 콘솔을 다시 시작하십시오.

SSH_ENV=$HOME/.ssh/environment



# start the ssh-agent

function start_agent {

    echo "Initializing new SSH agent..."

    # spawn ssh-agent

    /usr/bin/ssh-agent | sed 's/^echo/#echo/' > "${SSH_ENV}"

    echo succeeded

    chmod 600 "${SSH_ENV}"

    . "${SSH_ENV}" > /dev/null

    /usr/bin/ssh-add

}



if [ -f "${SSH_ENV}" ]; then

     . "${SSH_ENV}" > /dev/null

     ps -ef | grep ${SSH_AGENT_PID} | grep ssh-agent$ > /dev/null || {

        start_agent;

    }

else

    start_agent;

fi

PS Chrome 및 Opera는 bash와 호환되지 않는 줄 바꿈을 사용합니다. 복사 붙여 넣기에는 다른 브라우저를 사용하십시오.


답변

&URL에 메타 문자 (예 : 등)가있을 수 있습니다 . 이로 인해 git이 백그라운드에서 실행되고 Unix 시스템에서는 stdin에서 읽으려고하자마자 중지됩니다. A ;는 또한 라인을 통해 도중에 명령을 종료하고 Ctrl-C나머지 라인 (별도의 명령)을 중단시킵니다.

홈 디렉토리가 이상한 곳이 아닌 한 사용하도록 지시했지만 git레포 를 초기화하는 것은 흥미 롭습니다 . 이것은 명령이 명령 행의 나머지 부분을 보지 못하고 있음을 시사합니다. 이는 길 잃 거나 URL에 있을 때 발생합니다 ./cygdrive/c/src/project/dev/.git/~/src/project/devgit&;

(와는 wget아니지만 이 문제가 여러 번 발생 했습니다 git.)

를 시도 git clone다른 REPO에서, 또는 있는지, 같은 REPO에서 다른 전송을 사용하여 git이 REPO에 대한 일반적 아니면 그냥 엉망이된다. URL을 작은 따옴표로 묶을 수도 있습니다.


답변

다음 문제를 살펴보십시오. 이제는 Windows와의 민트 및 상호 운용성의 한계에 불과합니다.

이슈 56-박하

나는 또한 mysql을 실행하는 데 문제가 있었고 민트에서 그런 문제를 겪었습니다. 따라서 대답은 터미널 에뮬레이션 문제라는 것입니다.


답변

질문에 이미 답변되었습니다 … 나는 어떻게 고쳤는지 추가하고 싶습니다.

Windows를 확인 Git Bash하면 git다음 세트를 볼 수 있습니다.SSH_ASKPASS

$ echo $SSH_ASKPASS
/mingw64/libexec/git-core/git-gui--askpass

Cygwin에서 동일한 변수를 .bashrc

# Unconditionally export SSH_ASKPASS
export SSH_ASKPASS="/mingw64/libexec/git-core/git-gui--askpass"

또는

# export SSH_ASKPASS only if git is installed
hash git 2>/dev/null && export SSH_ASKPASS="/mingw64/libexec/git-core/git-gui--askpass"

이렇게하면 git은 Git에서 SSH_ASKPASS를 엽니 다. 추가 SW를 설치하거나 추가 스크립트를 만들 필요가 없었습니다.

이것이 도움이되기를 바랍니다!


답변

몇 년 전 Cygwin의 CVS 인증에 문제가 있었음을 기억합니다. Cygwin을 DOS 또는 Unix 스타일 줄 끝 (CRLF 대 LF)으로 설치했는지 여부와 관련이있었습니다. 설치 프로그램 대화 상자의 옵션 중 하나입니다. 잘못된 것을 고르면 (DOS가 효과가 있다고 생각합니다) 암호가 엉망이되거나 가짜 문자 등이 생길 수 있습니다.

어쨌든 다른 옵션을 시도해 볼 가치가 있습니다.