2012-07-31 1 views
1

J'ai essayé toute la journée de faire fonctionner git à l'intérieur des coquilles emacs (version 24) sur Windows 7 x86. (*) Le coupable est en fait ssh, ce qui ne marchera pas. Par exemple, en tapant:Quelle est la magie dans "Github pour Windows" qui le fait fonctionner dans emacs?

ssh -T [email protected] 

se bloque toujours, quel que soit le type de shell utilisé à l'intérieur emacs (le shell emacs (alias eshell) ou msys bash). En dehors d'emacs, cela fonctionne très bien (dans bash ou cmd.exe).

Notez le paramètre -T, qui dit "n'allouez pas un pseudo-tty" (emacs ne peut pas allouer un pseudo-tty, du moins pas sous Windows). Donc ce n'est pas le problème.

J'ai essayé d'utiliser ssh.exe à partir de MSYS (pas msys-git) ou "Git for Windows". Il faut se méfier! "Git for Windows" n'est pas la même chose que "Github for Windows". "Git for Windows" est un programme d'installation pour les binaires et les utilitaires de support obtenus en construisant git sous msys-git (un environnement de développement existant uniquement dans ce but). Pour cette raison, il "Git pour Windows" souvent appelé par erreur msys-git.

Entrez "Github pour Windows". En utilisant leur version de git/ssh, je suis capable d'utiliser git et ssh sous les shells emacs. Pour autant que je sache, le programme utilise simplement "Git for Windows" sous les enveloppes. Cependant, c'est une version modifiée. Par exemple, il y a un fichier etc/ssh/ssh_config qui a été ajouté.

J'ai déjà déterminé que certaines des configurations de etc/ssh/ssh_config sont primordiales pour que ssh fonctionne dans emacs. Cependant, cela seul n'explique pas pourquoi cela fonctionne, car l'utilisation de ce fichier de configuration avec "Git for Windows" ne fait pas l'affaire.

Ce que j'aimerais savoir, c'est ce que l'équipe Github a apporté à «Git for Windows» pour que ça fonctionne dans emacs. Je ne suis même pas sûr que "travailler dans emacs" était un objectif visé. C'est pourquoi la réponse à cette question est importante: si une future version de "Github for Windows" ne respecte pas la compatibilité emacs, je ne serai plus capable d'utiliser git dans les shells emacs.

(*) Oui, je sais tout sur vc-git, magit, clochard, etc. Je ne suis pas intéressé.

Répondre

6

Fondamentalement ssh est suspendu quand il demande un mot de passe. En raison de certains détails internes de Windows, les entrées sont traitées différemment lorsqu'elles proviennent d'un tube (Emacs), ou lorsqu'elles sont tapées dans une fenêtre de console (bash ou cmd.exe). Si ssh.exe et git.exe ne vident pas leurs tampons au bon moment, l'entrée peut se retrouver dans les limbes entre eux quand elle est envoyée depuis Emacs. Cela se produit uniquement lorsque Emacs exécute un sous-processus qui exécute lui-même un autre sous-processus, qui demande une entrée. La seule solution de contournement que je connaisse sans creuser dans le code source de git et ssh consiste à utiliser l'authentification par clé publique avec ssh-agent et à préautoriser votre clé avant d'essayer d'utiliser git depuis Emacs. Cela éliminera le besoin pour ssh de demander un mot de passe. Je ne sais pas si c'est une option pour github.

+0

J'ai en effet ssh-agent en arrière-plan. Donc, github pour Windows doit prendre soin de cela au démarrage. – Norswap

1

@ Le dernier point de JSON est ce qui vous intéresse - le "chiffrement par clé publique".

Voici quelques informations de la bouche du cheval - github docs.

Voici quelques more info sur comment ssh-agent fonctionne, y compris comment l'utiliser à partir de votre fichier .shrc.Fondamentalement, une fois que vous avez configuré votre clé publique sur github, vous devez avoir pour entrer votre mot de passe une fois par démarrage avec ssh-add et tout fonctionne comme par magie.

Questions connexes