magit-push zawiesza się w systemie Windows

10

Używam GNU Emacs w systemie Windows i nie mogę użyć magit-pushdo wypchnięcia moich lokalnych zmian do zdalnego repozytorium. Dzieje się tak w przypadku zdalnych repozytoriów, niezależnie od tego, czy są dostępne za pośrednictwem SSH czy HTTPS. Co muszę zrobić, aby magit-pushpraca w systemie Windows była tak płynna (a przynajmniej prawie tak samo) jak na moich komputerach z systemem Linux?

Wszystko, co widzę w *Messages*buforze, to

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

To samo pokazuje *magit-process*mniej więcej w buforze. Nic bardziej przydatnego. Jestem w stanie git push z linii poleceń, ale pyta o hasło do mojego klucza ssh. Czy to może być problem? Próbowałem załadować klucz za pomocą Pageant (kluczowy agent PuTTY), ale nie miało to większego znaczenia.

Jeśli jest to pomocne, mam zainstalowany Cygwin i byłbym zadowolony z rozwiązania polegającego na zmuszeniu Emacsa do korzystania z plików wykonywalnych Cygwin.

Ryan
źródło

Odpowiedzi:

6

Wiki Magit zawiera teraz stronę o różnych sposobach wypychania z Magit podczas korzystania z MS Windows. Sprawdź także nowy ssh-agencypakiet. Zarówno strona wiki, jak i pakiet zostały napisane przez @npostavs.

Pamiętaj też, że praktycznie nie jest to wina Magita, jeśli nie możesz naciskać. Zwykle jest to problem z konfiguracją (nawet jeśli możesz wypychać z powłoki, ale nie podczas korzystania z Magita).

Tarsjusz
źródło
6

Zwykle problem polega na tym, że Emacs nie może uzyskać dostępu do monitu o hasło do git w systemie Windows. Wydaje się więc, że „zawiesza się” podczas wypychania, gdzie naprawdę czeka na twoje hasło. Możesz to obejść, używając klucza ssh zamiast nazwy użytkownika / hasła w repozytorium git i wykonując pierwsze push ręcznie w powłoce (git zapamięta twoje hasło ssh po pierwszym push).

bastibe
źródło
1
Wydaje się, że powłoka Git Bash nie pamięta mojego hasła ssh, więc więcej pchnięć widzi to samo.
Ryan
3

Jeśli jeszcze tego nie zrobiłeś, zaleciłbym użycie SSH zamiast HTTP, ponieważ wiele osób poleciło mi to podczas mojego dochodzenia w tej sprawie. To powiedziawszy, byłem w stanie rozwiązać ten problem, korzystając z poniższych FAQ:

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

Brakującym komponentem (ze skryptu Gitub Bashrc Gituba) jest to, że nie obsługuje uruchamiania ssh-agent dla interfejsów takich jak linia poleceń Windows lub emacs. Wykonanie powyższych kroków inicjuje ssh-agent po uruchomieniu emacsa. Pamiętaj, że musisz uruchomić Git Bash i wprowadzić hasło SSH po uruchomieniu / ponownym uruchomieniu komputera.

PatternMatching
źródło
2

Ja także doświadczyłem tego zachowania od jakiegoś czasu i do dzisiaj nie próbowałem go naprawić. Zrobiłem to, umieszczając w moim pliku init:

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

Przetestowałem to również, otwierając czystą Emacsa ( emacs -Q), ładując magiti oceniając tę ​​linię, i zadziałało.

Działa to z Pageant, więc nie trzeba się z tym bawić ssh-agent.

Scott Weldon
źródło
1
Dla mnie było to najlepsze rozwiązanie dla kogoś, kto zainstalował git z wiersza poleceń i pliki wykonywalne związane z PuTTY, takie jak pageant.
Tom Purl
1

Jeśli masz już zainstalowany Cygwin, możesz używać pęku kluczy i środowiska pęku kluczy do zarządzania swoimi kluczami.

Użyj wybranej powłoki, aby uruchomić pęku kluczy

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

aby upewnić się, że klucze są załadowane do Emacsa.

Jonathan Leech-Pepin
źródło
Hmmm. Próbowałem tego i nic tak naprawdę się nie zmieniło. magit-pushKomenda wisiał tak jak to zawsze robi.
Ryan
1

Nigdy nie wymyśliłem, jak to naprawić za pomocą MSYS Git i Emacsa, ale oto bezproblemowe obejście.

Dodaj Git Credential Winstore do swojej $ PATH. Git-Credential-Winstore użyje pęku kluczy Windows do zarządzania hasłami dla Ciebie, a Magit chętnie prześle do zdalnych repozytoriów.

W swoim .gitconfigpliku ustaw następujące opcje:

[credential]
        helper = "winstore"

Działa to, ponieważ Git Credential Docs stwierdzają, że „jeśli nazwa pomocnika nie jest ścieżką bezwzględną, wówczas ciąg git credential- jest poprzedzany”. Wolę to podejście.

Alternatywnie możesz po prostu uruchomić git-credential-winstore.exe, a on sam zainstaluje się w folderze AppData i wypełni .gitconfigplik zapisaną na stałe ścieżką do jego lokalizacji. Po uruchomieniu .gitconfigbędzie wyglądać następująco:

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

Wykrzyknik instruuje Gita, aby traktował ciąg jako ścieżkę bezwzględną.

Joe
źródło
0

Jak wskazał @bastibe, Magit prawdopodobnie czeka na hasło i po prostu się tam zatrzymuje ...

Pamiętam następujące działania, kiedy zmuszono mnie do korzystania z systemu Windows :-). Nie pamiętam dokładnej nazwy polecenia, upewnij się również, że exec-pathzawiera c:/Program Files (x86)/Git/bin/.

(setenv "GIT_ASKPASS" "git-gui--askpass")
rimero
źródło
0

Uruchomiłem runemacs.exe z powłoki git. Teraz działa git push z Magit.

Majid alDosari
źródło
1
Wydaje się, że nie ma to żadnego związku z pytaniem. Jeśli chcesz odpowiedzieć na pytanie, edytuj swoją odpowiedź, która wyjaśnia, w jaki sposób bieganie runemacsjest w jakiś sposób powiązane z magit.
Gilles „SO- przestań być zły”
miły. zostaję zaznaczony do usunięcia, zanim jeszcze będę miał szansę lepiej wyjaśnić? to odpowiedź (rozwiązanie) na problem.
Majid alDosari
1
Nie sądzę, aby odpowiedź zasługiwała na głos. Ale może być lepiej wyjaśnić powód, dla którego zadziałało (jeśli uruchomione z powłoki Git w systemie Windows, niektóre zmienne środowiskowe zostaną zainicjowane inaczej w Emacsie, spowoduje to również, że Magit będzie mógł wchodzić w interakcje z Git w sposób, w jaki rozumie). Być może sposób, w jaki OP próbował uruchomić polecenia Magit, współdziałał z Git w sposób, którego Magit się nie spodziewał.
wvxvw
1
To jest odpowiedź. Użytkownik może nie wiedzieć, dlaczego to miało znaczenie, ale mówi, co zadziałało w ich przypadku.
Malabarba