magit-push trava no Windows

10

Estou usando o GNU Emacs no Windows e não consigo magit-pushenviar minhas alterações locais para um repositório remoto. Isso acontece com repositórios remotos, independentemente de serem acessados ​​com SSH ou HTTPS. O que preciso fazer para tornar o magit-pushtrabalho no Windows tão integrado (ou pelo menos quase) quanto em minhas máquinas Linux?

Tudo o que vejo no *Messages*buffer é

Running c:/Program Files (x86)/Git/bin/git.exe push -v origin master:refs/heads/master

O mesmo mostra no *magit-process*buffer, mais ou menos. Nada mais útil. Eu sou capaz de git push a partir da linha de comando, mas solicita a senha da minha chave ssh. Esse pode ser o problema? Tentei carregar a chave com o Pageant (o agente chave do PuTTY), mas isso não pareceu fazer a diferença.

Se for útil, eu tenho o Cygwin instalado e ficaria feliz com uma solução que envolvia forçar o Emacs a usar os executáveis ​​do Cygwin.

Ryan
fonte

Respostas:

6

O wiki do Magit agora apresenta uma página sobre as várias maneiras que você pode usar o Magit ao usar o MS Windows. Verifique também o novo ssh-agencypacote. Tanto a página da wiki quanto o pacote foram escritos por @npostavs.

Observe também que praticamente nunca é culpa do Magit se você não puder pressionar. Geralmente, é um problema de configuração (mesmo que você possa enviar do shell, mas não ao usar o Magit).

tarso
fonte
6

Normalmente, o problema é que o Emacs não pode acessar o prompt de senha do git no Windows. Assim, parece "travar" no push, onde realmente está aguardando sua senha. Você pode contornar isso usando uma chave ssh em vez de um nome de usuário / senha no seu repositório git e fazendo o primeiro push manualmente no shell (o git lembrará sua senha ssh após o primeiro push).

bastibe
fonte
11
O shell bash do Git não parece estar se lembrando da minha senha ssh, então mais pushes estão apenas vendo a mesma coisa.
Ryan
3

Se você ainda não o fez, eu recomendaria o uso do SSH em vez do HTTP, como muitos me recomendaram durante minha investigação. Dito isso, consegui resolver esse problema usando as Perguntas frequentes abaixo:

https://github.com/magit/magit/wiki/FAQ#windows-cannot-push-with-ssh-passphrase

O componente ausente (do script Git Bash .bashrc do Github) é que ele não lida com a inicialização do ssh-agent para interfaces como a linha de comando do Windows ou o emacs. Seguir as etapas acima inicia o ssh-agent na inicialização do emacs. Observe que você precisará iniciar o Git Bash e digitar sua senha SSH ao iniciar / reiniciar sua máquina.

PatternMatching
fonte
2

Eu também tenho experimentado esse comportamento há algum tempo, e até hoje não consegui realmente tentar corrigi-lo. Fiz isso colocando o seguinte no meu arquivo de inicialização:

(setenv "GIT_SSH" "C:/Path/to/PuTTY/plink.exe")

Também testei isso abrindo um Emacs ( emacs -Q) limpo , carregando magite avaliando essa linha, e funcionou.

Isso funciona Pageant, então não há necessidade de mexer ssh-agent.

Scott Weldon
fonte
11
Para mim, essa foi a melhor solução para alguém que instalou o git na linha de comando e os executáveis ​​relacionados ao PuTTY, como o concurso.
Tom Purl #
1

Se você já possui o Cygwin instalado, pode usar as chaves e o ambiente das chaves para gerenciar suas chaves.

Use o shell de sua escolha para lançar as chaves e, em seguida,

(require 'keychain-environment)
(keychain-refresh-environment)

para garantir que as chaves sejam carregadas no Emacs.

Jonathan Leech-Pepin
fonte
Hummm. Eu tentei isso, e nada realmente mudou. O magit-pushcomando travou como sempre.
Ryan
1

Eu nunca descobri como consertar isso apenas com o MSYS Git e o Emacs, mas aqui está uma solução perfeita.

Adicione o Git Credential Winstore ao seu $ PATH. O Git-Credential-Winstore usará o chaveiro do Windows para gerenciar suas senhas e o Magit enviará felizmente para repositórios remotos.

No seu .gitconfigarquivo, defina o seguinte:

[credential]
        helper = "winstore"

Isso funciona porque o Git Credential Docs declara que "se o nome do auxiliar não for um caminho absoluto, a cadeia de caracteres git credential- será anexada". Eu prefiro essa abordagem.

Como alternativa, você pode simplesmente executar o git-credential-winstore.exe e ele se instala na pasta AppData e preenche seu .gitconfigarquivo com um caminho codificado para sua localização. Depois de executá-lo, você .gitconfigficará assim:

[credential]
        helper = !"c:\\Users\Joe\\\AppData\\Roaming\\GitCredStore\\git-credential-winstore.exe"

O ponto de exclamação instrui o Git a tratar a string como um caminho absoluto.

Joe
fonte
0

Como o @bastibe apontou, o Magit provavelmente está aguardando a entrada da senha e apenas fica lá ...

Lembro-me do seguinte trabalho quando fui forçado a usar o Windows :-). Não lembro o nome exato do comando, também verifique se o exec-pathcontém c:/Program Files (x86)/Git/bin/.

(setenv "GIT_ASKPASS" "git-gui--askpass")
rimero
fonte
0

Corri o runemacs.exe a partir do shell do git. Agora, o git push do magit funciona.

Majid alDosari
fonte
11
Isso não parece estar relacionado à questão de forma alguma. Se você quis responder à pergunta, edite sua resposta que explica como a corrida runemacsestá de alguma forma relacionada ao magit.
Gilles 'SO- stop be evil'
legal. fico marcado para exclusão antes mesmo de ter uma chance de explicar melhor? é uma resposta (solução) para o problema.
Majid alDosari
11
Não acho que a resposta mereça ser votada. Mas talvez seja melhor explicar o motivo pelo qual funcionou (se estiver executando o shell Git no Windows, algumas variáveis ​​de ambiente serão inicializadas de maneira diferente no Emacs, isso também fará com que o Magit seja capaz de interagir com o Git da maneira que ele entende). Talvez a maneira como o OP tentou executar os comandos do Magit interagisse com o Git de uma maneira que o Magit não esperava.
wvxvw
11
Esta é uma resposta. O usuário pode não saber por que fez a diferença, mas está dizendo o que funcionou no caso deles.
Malabarba