さて、これは変です。まず、これは最新のcygwinで実行されているminttyであり、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>
ここで何が起こっているのですか?これは端末の問題ですか、シェルの問題ですか、gitの問題ですか、それともcygwinの問題ですか?
更新:はい、WindowsバージョンではなくCygwingitバージョンを実行しています:
$ 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
OK、私は明確な解決策を見つけたと思います。
問題は、使用されている端末(puttycyg、mintty、cmd.exe)に関係なく、Gitはデフォルトで、より適切に構成された代替手段がない場合、「単純なパスワードプロンプト」を使用しようとすることです(の説明で読むことができます)。 core.askpass
構成オプション )。
単純なパスワードプロンプトは、明らかに実際のUNIXでのみ機能し、Cygwinでは機能しません。
解決策は、Windows用のSSH_ASKPASS互換プログラムをインストールし、それを使用するようにGitを構成することです。
私がしたことは:
git config --global core.askpass "C:/win_ssh_askpass.exe"
。 EXEファイルの名前には、マイナス記号ではなくアンダースコアが含まれていることに注意してください。https://<user>@<domain>/<repository>
)。それ以外の場合、Gitは同じaskpassユーティリティを使用して、パスワードを要求する前にログインを要求します。ログインとして無意識のうちにパスワードを入力する可能性があります。ログインはWebサーバーに送信され、プレーンテキストとしてアクセスログに記録されます。これで、GitはエレガントなGUIウィンドウを使用してパスワードを要求し、使用する端末に関係なく機能します:)
同じ問題が発生しましたが、私の場合はCygwinサーバーでSSH接続されているため、明らかにWin32GUIのaskpassが機能しません。
代わりに、askpassを実行するためにこの単純なスクリプトを作成しました。 /bin/tty.exe
からttyデバイスを取得することで通常のプロンプトからも使用できますが、不明な理由で機能しませんでした(自分で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
P.S. ChromeおよびOpera bashと互換性のない改行を使用してください-コピー&ペーストには別のブラウザを使用してください
次の問題を見てください。これは、Windowsとのミンティと相互運用性の制限にすぎないと確信しています。
Minttyからmysqlなどを実行する際にも問題が発生しました。そのため、答えはターミナルエミュレーションの問題であるということです。
質問はすでに回答済みです...修正方法を追加したいと思います。
Windows Git Bash
を確認すると、SSH_ASKPASS
の後にgit
が設定されていることがわかりました。
$ 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をインストールしたり、追加のスクリプトを作成したりする必要はありませんでした。
これがお役に立てば幸いです。
URLに&
などのメタ文字が含まれている可能性があります。これにより、gitがバックグラウンドで実行され、Unixシステムでは、stdinから読み取ろうとするとすぐに停止します。 ;
も行の途中でコマンドを終了し、Ctrl-C
は行の残りの部分(別のコマンド)を中止します。
/cygdrive/c/src/project/dev/.git/
を使用するように指示した場合でも、git
が~/src/project/dev
のリポジトリを初期化するのは興味深いことです(ホームディレクトリが奇妙な場所にある場合を除く)。これは、git
コマンドがコマンドラインの残りの部分を認識していないことを示しています。これは、URLに&
または;
が含まれていない場合に発生します。
(私はこの問題をwget
で何度も経験しましたが、git
では発生しませんでした。)
別のリポジトリからのgit clone
を試すか、同じリポジトリからの別のトランスポートを使用して、git
が一般的に混乱しているか、このリポジトリのためだけに混乱しているかを確認してください。 URLを一重引用符で囲むこともできます。
頻繁に使用するリポジトリの場合、最も簡単な方法は、〜/ .netrcファイルを作成することです。
machine git.example.com
login yourlogin
password your password
明らかに、ファイルに適切に厳格な権限を設定する必要があります。
私は同じ問題を抱えています、そしてこれとは反対に thread 、問題はすべての可能な端末でCygwinGITで発生します-puttycyg
、mintty
および古典的なWindowscmd.exe
。
私はまだ適切な解決策を探していますが、回避策があります-それは非常に安全ではありませんが、リポジトリのURLにパスワードを配置してみることができます:例:
git clone https://<user>:<password>@<domain>/<repository>/
回避策はあなたのために働きますか?
数年前、CygwinのCVS認証に問題があったことを覚えています...それは、CygwinをDOSまたはUnixスタイルの行末(CRLFとLFのみ)のどちらでインストールしたかと関係がありました。これは、インストーラーダイアログのオプションの1つです。間違ったものを選択した場合(DOSが機能したと思います)、パスワードが壊れたり、偽の文字などが含まれたりします。
とにかく、他のオプションを試す価値があるかもしれません。