W porządku, to dziwne. Po pierwsze, jest to bardzo funkcjonalne na aktualnym cygwin, z git pobranym z setup.exe cygwin. Używam 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>
Co tu się dzieje? Czy jest to problem terminalny, problem z powłoką, problem z gitem lub problem z cygwinem?
Aktualizacja: Tak, korzystam z wersji git Cygwin, a nie 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
sugeruje, że znaki nie są „ zostanie wysłany do standardowego procesu git. Ale nie wiem, jaki może być konkretny problem.Odpowiedzi:
OK, myślę, że znalazłem konkretne rozwiązanie.
Problem polega na tym, że niezależnie od używanego terminala (puttycyg, mintty, cmd.exe), Git domyślnie, przy braku lepiej skonfigurowanych alternatyw, próbuje użyć „prostego monitu o hasło” (jak można przeczytać w opisie
core.askpass
opcja konfiguracji ).Prosty monit o podanie hasła najwyraźniej działa tylko na prawdziwym systemie UNIX, ale nie na Cygwin.
Rozwiązaniem jest zainstalowanie programu kompatybilnego z SSH_ASKPASS dla Windows i skonfigurowanie Gita, aby go używał.
To co zrobiłem to:
git config --global core.askpass "C:/win_ssh_askpass.exe"
. Zauważ, że plik EXE ma podkreślenia w nazwie, a nie znaki minus.https://<user>@<domain>/<repository>
). W przeciwnym razie Git poprosi o login, zanim poprosi o hasło, używając tego samego narzędzia askpass. Możesz nieświadomie wprowadzić hasło jako login, które zostanie wysłane do serwera WWW i zalogowane w dzienniku dostępu jako zwykły tekst!Teraz Git prosi o hasło przy użyciu eleganckiego okna GUI i działa niezależnie od używanego terminala :)
źródło
Wystąpił ten sam problem - jednak w moim przypadku jestem SSH na serwerze Cygwin, więc oczywiście askpass Win32 GUI nie będzie działać.
Zamiast tego napisałem ten prosty skrypt, aby wykonać askpass. Myślałem, że można go również użyć z regularnych podpowiedzi, pobierając urządzenie tty,
/bin/tty.exe
ale to nie zadziałało z niewiadomego powodu (nie krępuj się sam lub poszukaj innego rozwiązania, aby uzyskać tty, być może popełniłem błąd )./bin/askpass.sh:
Upewnij się, że ten skrypt jest wykonywalny i użyj go jako ustawienia core.askpass twojego gita. Ponieważ ten skrypt opiera się na zmiennej $ SSH_TTY, zwykle działa tylko z SSH. Możesz jednak ustawić $ SSH_TTY w
.bashrc
lub.bash_profile
jeśli nie jest ustawiony; w ten sposób powinno działać nawet z konsoli. Powinien to zrobić następujący wiersz w skrypcie rc:źródło
powyższe rozwiązania nie działają dla mnie, ale znalazłem inne.
musisz uruchomić agenta ssh
po prostu dodaj do ~ / .bashrc i uruchom ponownie konsolę
PS Chrome i Opera używają podziału linii, który nie jest kompatybilny z bash - wystarczy użyć innej przeglądarki do wklejania kopii
źródło
Możliwe, że masz metaznak, np.
&
W adresie URL. Spowodowałoby to, że git działałby w tle, a na systemie uniksowym byłby zatrzymywany, gdy tylko próbował czytać ze standardowego wejścia. A;
również zakończyłoby polecenie w połowie linii, aCtrl-C
spowodowałoby przerwanie reszty linii (osobne polecenie).To ciekawe, że
git
inicjuje repozytorium,/cygdrive/c/src/project/dev/.git/
nawet jeśli kazałeś go użyć~/src/project/dev
(chyba że masz katalog domowy w dziwnym miejscu). Sugerowałoby to, żegit
polecenie nie widzi reszty wiersza polecenia, co stałoby się, gdyby był błąd&
lub;
adres URL.(Miałem ten problem wiele razy
wget
, chociaż nie zgit
.)Wypróbuj inną
git clone
z repozytorium lub użyj innego transportu z tej samej repozytorium, aby sprawdzić, czygit
jest to ogólnie popsute, czy tylko dla tego repozytorium. Możesz także spróbować umieścić pojedyncze cudzysłowy wokół adresu URL.źródło
~/src
jest dowiązaniem symbolicznym do/cygdrive/c/src
(C:\src
). Nie ma&
adresu URL. Spróbuję sklonować publiczne repozytorium git, ale generalnie te nie będą miały hasła ...Spójrz na następujący problem - jestem całkiem pewien, że teraz jest to tylko ograniczenie mięty i interoperacyjności z Windows.
Numer 56 - miętowy
Miałem również problemy z uruchomieniem mysql i takich z mintty - więc odpowiedź jest taka, że jest to problem emulacji terminala.
źródło
Pytanie zostało już udzielone ... Chciałbym tylko dodać, jak to naprawiłem:
Sprawdzając system Windows
Git Bash
, zobaczyłemgit
następujący zestawSSH_ASKPASS
Tak więc w Cygwin dodałem tę samą zmienną do
.bashrc
lub
Robiąc to, git otwiera SSH_ASKPASS z Git ... Nie musiałem instalować żadnego dodatkowego oprogramowania ani tworzyć żadnego dodatkowego skryptu.
Mam nadzieję, że to może pomóc!
źródło
Wiele lat temu pamiętam pewne problemy z uwierzytelnianiem CVS Cygwina ... miało to związek z tym, czy zainstalowałeś Cygwina z zakończeniami linii w stylu DOS lub Unix (CRLF vs tylko LF); jest to jedna z opcji w oknie dialogowym instalatora. Jeśli wybierzesz niewłaściwy (myślę, że DOS był tym, który działał), hasło skończyłoby się zniekształceniem lub fałszywym charakterem lub czymś takim.
W każdym razie warto wypróbować drugą opcję.
źródło
Mam ten sam problem, i, w przeciwieństwie do tego wątku , problem występuje z Cygwin GIT we wszystkich możliwych terminali -
puttycyg
,mintty
i klasycznego systemu Windowscmd.exe
.Wciąż szukam odpowiedniego rozwiązania, ale istnieje obejście - chociaż jest bardzo niepewne, możesz spróbować umieścić hasło w adresie URL repozytorium, np .:
Czy to obejście działa dla Ciebie?
źródło
Jeśli często używasz repozytorium, najłatwiej jest utworzyć plik ~ / .netrc
Oczywiście powinieneś ustawić odpowiednio drakońskie uprawnienia do pliku.
źródło
Tylko udoskonalenie komentarza nr 2
Jest Cygwin ssh-ask-pass (nieoficjalny) tutaj
Wystarczy pobrać plik tar.bz2 i rozpakować w folderze cygwin. Działa bez instalowania środowiska uruchomieniowego Borland Delphi.
źródło