Cygwin / Git Bizarre Terminal Problem

6598
emptyset

Okay, das ist komisch. Zunächst einmal läuft dies auf dem neuesten Stand von cygwin, wobei git aus der setup.exe von cygwin gezogen wird. Ich lasse zsh laufen.

$ 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> 

Was geht hier vor sich? Ist dies ein Terminalproblem, ein Shellproblem, ein Git-Problem oder ein Cygwin-Problem?

Update: Ja, ich verwende die Cygwin-git-Version, nicht die Windows-Version:

$ 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 
15
Ich vermute ein Terminalproblem. Die Tatsache, dass Ihr Passwort angezeigt wird, deutet darauf hin, dass das Terminal nicht ordnungsgemäß in den stillen Modus versetzt wird (in dem die von Ihnen eingegebenen Zeichen nicht angezeigt werden). Die Tatsache, dass der Kennworttext nach dem Drücken von `^ C` erneut angezeigt wird, deutet darauf hin Die Charaktere werden nicht an stdin des Git-Prozesses gesendet. Aber ich weiß nicht, was das spezifische Problem sein könnte. David Z vor 13 Jahren 1
Vielen Dank für den Hinweis. Ich bin auf dieses Problem gestoßen: http://code.google.com/p/mintty/issues/detail?id=56. Es gibt jedoch keine Möglichkeit, git in den interaktiven Modus wie die ausführbare Python-Datei zu setzen ... emptyset vor 13 Jahren 0
Sind Sie sicher, dass Sie Cygwins Version von git aufrufen? Die Mintty-Ausgabe 56 gilt nur für native Windows-Programme. ak2 vor 13 Jahren 1
Haben Sie eine Lösung für dieses Problem gefunden? pauldoo vor 13 Jahren 0

10 Antworten auf die Frage

8
Aleksander Adamowski

OK, ich glaube, ich habe eine bestimmte Lösung gefunden.

Das Problem ist, dass Git unabhängig von dem verwendeten Terminal (puttycyg, mintty, cmd.exe) standardmäßig versucht, in Abwesenheit besser konfigurierter Alternativen eine "einfache Kennwortaufforderung" zu verwenden (wie Sie in der Beschreibung von lesen können) core.askpass Konfigurationsoption ).

Die einfache Passwortabfrage funktioniert anscheinend nur unter realem UNIX, aber nicht unter Cygwin.

Die Lösung besteht darin, ein SSH_ASKPASS-kompatibles Programm für Windows zu installieren und Git für die Verwendung zu konfigurieren.

Was ich gemacht habe war:

  1. Installieren Sie die Anwendung win-ssh-askpass, indem Sie sie auspacken und nach C: \ kopieren.
  2. Herunterladen und Installieren des Borland Delphi 5 Runtime erforderlich durch Win-ssh-askpass (hart von heute zu kommen, aber fand man auf http://www.satsignal.eu/software/runtime.html )
  3. Konfigurieren Git erhalten Passwörter Win-ssh-askpass mit: git config --global core.askpass "C:/win_ssh_askpass.exe". Beachten Sie, dass die EXE-Datei einen Unterstrich und keine Minuszeichen enthält.
  4. Denken Sie daran, immer Ihre Login in der URL zu platzieren ( https://<user>@<domain>/<repository>). Andernfalls fragt Git nach dem Login, bevor er nach dem Passwort fragt, und zwar mit demselben askpass-Dienstprogramm. Sie können Ihr Passwort unwissentlich als Login eingeben, das an die Webserver gesendet und in ihrem Zugriffsprotokoll als Klartext protokolliert wird!

Nun fragt Git nach dem Passwort über ein elegantes GUI-Fenster und funktioniert unabhängig vom verwendeten Terminal :)

danke, zufällig laufen, aber läuft :) Ich weiß nicht, warum git nicht wie erwartet läuft. Subversion machen es gut. corretge vor 12 Jahren 0
Ich lief gerade folgendes und es öffnet sich eine gui: git config --global core.askpass "git-gui - askpass" klon Derek Greer vor 9 Jahren 1
7
Thomas Guyot-Sionnest

Ich habe das gleiche Problem erlebt - in meinem Fall bin ich jedoch auf dem Cygwin-Server SSH-abhängig. Offensichtlich funktioniert ein Win32-GUI-Askpass nicht.

Stattdessen habe ich dieses einfache Skript geschrieben, um den Askpass auszuführen. Ich denke, es könnte auch von regulären Ansagen verwendet werden, indem man das tty-Gerät von /bin/tty.exemir holt, aber das funktionierte aus einem unbekannten Grund nicht ).

/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 

Vergewissern Sie sich, dass dieses Skript ausführbar ist, und verwenden Sie es als Einstellung für die Einstellung "core.askpass" von git. Da dieses Skript auf der Variablen $ SSH_TTY basiert, funktioniert es normalerweise nur von SSH. Sie könnten jedoch $ SSH_TTY in setzen .bashrcoder .bash_profilewenn nicht gesetzt; Auf diese Weise sollte es auch von einer Konsole aus funktionieren. Die folgende Zeile in Ihrem RC-Skript sollte dies tun:

[ -z "$SSH_TTY" ] && export SSH_TTY=$(/bin/tty.exe) 
Ich kann diese Lösung bestätigen, funktioniert sehr gut. schlamar vor 12 Jahren 0
Das hat auch für mich gut funktioniert. Ich musste jedoch eine Weiterleitung (1> & 2) für diese Meldung "Fehler beim Öffnen ..." hinzufügen, damit sie sichtbar wird. Eric vor 12 Jahren 0
2
Aloy

Die obigen Lösungen funktionieren nicht für mich, aber ich habe eine andere gefunden.

Sie müssen den SSH-Agenten ausführen

Fügen Sie einfach ~ / .bashrc hinzu und starten Sie die Konsole neu

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/' > "$"  echo succeeded  chmod 600 "$"  . "$" > /dev/null  /usr/bin/ssh-add  }    if [ -f "$" ]; then  . "$" > /dev/null  ps -ef | grep $ | grep ssh-agent$ > /dev/null || {  start_agent;  }  else  start_agent;  fi 

PS Chrome und Opera verwenden Linebreak, das nicht mit Bash kompatibel ist. Verwenden Sie zum Kopieren und Einfügen einen anderen Browser

1
Neil Mayhew

Möglicherweise haben Sie ein Metazeichen, z. B. &in der URL. Dies würde dazu führen, dass git im Hintergrund läuft und auf einem Unix-System angehalten wird, sobald versucht wird, von stdin zu lesen. A ;würde den Befehl auch teilweise durch die Zeile beenden, und der Ctrl-CRest der Zeile (ein separater Befehl) würde abgebrochen.

Es ist interessant, dass gitdas Repo in initialisiert wird /cygdrive/c/src/project/dev/.git/, obwohl Sie ihm gesagt haben, es zu verwenden ~/src/project/dev(es sei denn, Sie haben Ihr Heimatverzeichnis an einem fremden Ort). Dies deutet darauf hin, dass der gitBefehl den Rest der Befehlszeile nicht sieht. Dies wäre der Fall, wenn ein Streuner &oder ;die URL vorhanden ist.

(Ich hatte dieses Problem viele Male mit wget, obwohl nicht mit git.)

Versuchen Sie es mit einem git cloneanderen Repo oder verwenden Sie einen anderen Transport vom selben Repo, um zu sehen, ob gites allgemein oder nur für dieses Repo versaut ist. Sie können auch versuchen, die URL in Anführungszeichen zu setzen.

`~ / src` ist ein Symlink zu` / cygdrive / c / src` (`C: \ src`). Es gibt kein "&" in der URL. Ich werde versuchen, ein öffentliches Git-Repository zu klonen, aber im Allgemeinen haben diese kein Passwort ... emptyset vor 13 Jahren 0
1
emptyset

Sehen Sie sich das folgende Problem an - ich bin mir ziemlich sicher, dass dies nur eine Einschränkung der Aktualität und der Interoperabilität mit Windows ist.

Ausgabe 56 - mintty

Ich hatte auch Probleme mit mysql und so weiter von mintty - also ist die Antwort, dass es ein Problem mit der Terminal-Emulation ist.

1
W0rmH0le

Die Frage wurde bereits beantwortet ... Ich möchte nur hinzufügen, wie ich das Problem behoben habe:

Bei der Überprüfung von Windows Git Bashkonnte ich gitfolgendes Set sehenSSH_ASKPASS

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

Also habe ich auf Cygwin dieselbe Variable hinzugefügt .bashrc

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

oder

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

Dadurch öffnet git den SSH_ASKPASS von Git ... Ich musste keine zusätzliche SW installieren oder ein zusätzliches Skript erstellen.

Hoffe das kann helfen!

0
timday

Ich erinnere mich, dass ich vor Jahren Probleme mit Cygwins CVS-Authentifizierung hatte ... es ging darum, ob Sie Cygwin mit den DOS- oder Unix-Style-Endungen (CRLF vs. nur LF) installiert haben. Dies ist eine der Optionen im Installationsdialogfeld. Wenn Sie das falsche ausgewählt haben (ich denke, DOS war das, was funktioniert hat), würde das Passwort am Ende verstümmelt sein oder mit einem unechten Charakter oder so etwas.

Auf jeden Fall lohnt es sich, die andere Option auszuprobieren.

0
Aleksander Adamowski

Ich habe das gleiche Problem, und, im Gegensatz zu diesem Thread, tritt das Problem mit Cygwin GIT in allen möglichen Terminals - puttycyg, minttyund die klassischen Windows - cmd.exe.

Ich suche immer noch nach einer geeigneten Lösung, aber es gibt eine Problemumgehung. Obwohl dies sehr unsicher ist, können Sie versuchen, das Kennwort in der Repository-URL zu platzieren, z. B .:

git clone https://<user>:<password>@<domain>/<repository>/ 

Funktioniert die Problemumgehung für Sie?

0
Raghu

Nur eine Verbesserung zu Kommentar # 2

Es gibt einen cygwin ssh-ask-Pass (inoffizielle) hier

Laden Sie einfach die tar.bz2 herunter und entpacken Sie sie in Ihrem cygwin-Ordner. Es funktioniert ohne die Installation von Borland Delphi Runtime.

0
Carson Chittom

Wenn es sich um ein Repository handelt, das Sie häufig verwenden, können Sie am besten eine ~ / .netrc-Datei mit erstellen

machine git.example.com login yourlogin password your password 

Natürlich sollten Sie für die Datei entsprechend drakonische Berechtigungen festlegen.

Warum nicht einfach ssh als Transport verwenden? vonbrand vor 8 Jahren 0