D'accord, c'est bizarre. Tout d'abord, cela fonctionne parfaitement sur cygwin à jour, avec git tiré de setup.exe de cygwin. J'utilise 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>
Qu'est-ce qui se passe ici? Est-ce un problème de terminal, un problème de shell, un problème de git ou un problème de cygwin?
Mise à jour: Oui, j'exécute la version Cygwin git, pas la version 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
suggère que les caractères ne sont pas ' t envoyé à stdin du processus git. Mais je ne sais pas quel pourrait être le problème spécifique.Réponses:
OK, je pense avoir trouvé une solution définitive.
Le problème est que, quel que soit le terminal utilisé (puttycyg, mintty, cmd.exe), Git par défaut, en l'absence d'alternatives mieux configurées, essaie d'utiliser une "invite de mot de passe simple" (comme vous pouvez le lire dans la description de
core.askpass
option de configuration ).L'invite de mot de passe simple ne fonctionne apparemment que sur UNIX réel, mais pas sur Cygwin.
La solution consiste à installer un programme compatible SSH_ASKPASS pour Windows et à configurer Git pour l'utiliser.
Ce que j'ai fait, c'est:
git config --global core.askpass "C:/win_ssh_askpass.exe"
. Notez que le fichier EXE a des traits de soulignement dans son nom, pas des signes moins.https://<user>@<domain>/<repository>
). Sinon, Git demandera la connexion avant de demander le mot de passe, en utilisant le même utilitaire askpass. Vous pouvez, sans le savoir, entrer votre mot de passe comme identifiant, qui sera envoyé au webserwer et enregistré dans son journal d'accès en texte brut!Maintenant, Git demande le mot de passe à l'aide d'une élégante fenêtre GUI et fonctionne quel que soit le terminal utilisé :)
la source
J'ai rencontré le même problème - mais dans mon cas, je suis SSH sur le serveur Cygwin, donc évidemment un askpass GUI Win32 ne fonctionnera pas.
Au lieu de cela, j'ai écrit ce script simple pour faire l'askpass. Je pensais que cela pouvait également être utilisé à partir d'invites régulières en obtenant le périphérique tty,
/bin/tty.exe
mais cela n'a pas fonctionné pour une raison inconnue (n'hésitez pas à vous tty ou à chercher une autre solution pour obtenir le tty, peut-être que je me suis trompé d'une manière ou d'une autre )./bin/askpass.sh:
Assurez-vous que ce script est exécutable et utilisez-le comme paramètre core.askpass de votre git. Étant donné que ce script repose sur la variable $ SSH_TTY, il ne fonctionnera normalement qu'à partir de SSH. Vous pouvez cependant définir $ SSH_TTY dans
.bashrc
ou.bash_profile
s'il n'est pas défini ; de cette façon, cela devrait fonctionner même à partir d'une console. La ligne suivante dans votre script rc devrait le faire:la source
les solutions ci-dessus ne fonctionnent pas pour moi, mais j'en ai trouvé une autre.
vous devez exécuter l'agent ssh
ajoutez simplement à ~ / .bashrc et redémarrez la console
PS Chrome et Opera utilisent un saut de ligne qui n'est pas compatible avec bash - utilisez simplement un autre navigateur pour copier-coller
la source
Il est possible que vous ayez un métacaractère, tel que
&
dans l'URL. Cela provoquerait l'exécution de git en arrière-plan, et sur un système Unix, il serait arrêté dès qu'il tenterait de lire depuis stdin. A;
mettrait également fin à la commande à mi-chemin de la ligne etCtrl-C
entraînerait l'abandon du reste de la ligne (une commande distincte).C'est intéressant qui
git
initialise le dépôt/cygdrive/c/src/project/dev/.git/
même si vous lui avez dit d'utiliser~/src/project/dev
(sauf si vous avez votre répertoire personnel dans un endroit étrange). Cela suggérerait que lagit
commande ne voit pas le reste de la ligne de commande, ce qui se produirait s'il y avait une erreur&
ou;
dans l'URL.(J'ai eu ce problème plusieurs fois avec
wget
, mais pas avecgit
.)Essayez un à
git clone
partir d'un référentiel différent, ou utilisez un transport différent du même référentiel, pour voir s'ilgit
est gâché de manière générale ou uniquement pour ce référentiel. Vous pouvez également essayer de mettre des guillemets simples autour de l'URL.la source
~/src
est un lien symbolique vers/cygdrive/c/src
(C:\src
). Il n'y a pas&
d'URL. J'essaierai de cloner un dépôt git public, mais généralement ceux-ci n'auront pas de mot de passe ...Jetez un œil au problème suivant - je suis presque certain maintenant que c'est juste une limitation de menthe et d'interopérabilité avec Windows.
Numéro 56 - Mintty
J'ai également eu des problèmes avec mysql et autres depuis mintty - donc, la réponse est que c'est un problème d'émulation de terminal.
la source
La question a déjà été répondue ... Je voudrais juste ajouter comment j'ai corrigé:
En vérifiant Windows
Git Bash
, je pouvais voir cetgit
ensemble suivantSSH_ASKPASS
Donc, sur Cygwin, j'ai ajouté la même variable à
.bashrc
ou
Ce faisant, git ouvre le SSH_ASKPASS de Git ... Je n'ai pas eu à installer de logiciel supplémentaire ni à créer de script supplémentaire.
J'espère que cela peut vous aider!
la source
Il y a des années, je me souviens avoir eu quelques problèmes avec l'authentification CVS de Cygwin ... c'était pour savoir si vous aviez installé Cygwin avec les terminaisons de ligne de style DOS ou Unix (CRLF vs juste LF); c'est l'une des options de la boîte de dialogue du programme d'installation. Si vous avez choisi le mauvais (je pense que DOS était celui qui fonctionnait), le mot de passe finirait par être altéré ou avec un caractère faux ou quelque chose.
Quoi qu'il en soit, cela pourrait valoir la peine d'essayer l'autre option.
la source
J'ai le même problème et, contrairement à ce fil , le problème se produit avec Cygwin GIT dans tous les terminaux possibles -
puttycyg
,mintty
et Windows classiquecmd.exe
.Je suis toujours à la recherche d'une solution appropriée, mais il existe une solution de contournement - bien que ce soit très peu sûr, vous pouvez essayer de placer le mot de passe dans l'URL du référentiel, par exemple:
La solution de contournement fonctionne-t-elle pour vous?
la source
S'il s'agit d'un référentiel que vous utilisez souvent, la chose la plus simple peut être de créer un fichier ~ / .netrc avec
De toute évidence, vous devez définir des autorisations draconiennes appropriées sur le fichier.
la source
Juste un raffinement sur le commentaire # 2
Il y a un cyshwin ssh-ask-pass (non officiel) ici
Téléchargez simplement le fichier tar.bz2 et décompressez dans votre dossier cygwin. Il fonctionne sans installer le runtime borland delphi.
la source