magit-push hang pada Windows

10

Saya menggunakan GNU Emacs di Windows, dan saya tidak dapat menggunakan magit-pushuntuk mendorong perubahan lokal saya ke repositori jarak jauh. Ini terjadi dengan repositori jarak jauh terlepas dari apakah mereka diakses dengan SSH atau HTTPS. Apa yang harus saya lakukan agar magit-pushWindows berfungsi dengan mulus (atau setidaknya hampir seperti itu) seperti pada mesin Linux saya?

Yang saya lihat di *Messages*buffer adalah

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

Acara yang sama di *magit-process*buffer, lebih atau kurang. Tidak ada yang lebih bermanfaat. Saya bisa mendapatkan push dari baris perintah, tetapi ia meminta kata sandi kunci ssh saya. Mungkinkah itu masalahnya? Saya sudah mencoba memuat kunci dengan Pageant (agen kunci Putty), tetapi itu tampaknya tidak membuat perbedaan.

Jika ini membantu, saya telah menginstal Cygwin, dan akan senang dengan solusi yang melibatkan memaksa Emacs untuk menggunakan executable Cygwin.

Ryan
sumber

Jawaban:

6

Wiki Magit sekarang menampilkan halaman tentang berbagai cara yang dapat didorong dari Magit saat menggunakan MS Windows. Juga checkout ssh-agencypaket baru . Halaman wiki dan paket ditulis oleh @npostavs.

Perhatikan juga bahwa itu sebenarnya bukan kesalahan Magit jika Anda tidak bisa mendorong. Ini biasanya masalah konfigurasi (bahkan jika Anda bisa mendorong dari shell tetapi tidak ketika menggunakan Magit).

tarsius
sumber
6

Biasanya, masalahnya adalah Emacs tidak dapat mengakses prompt kata sandi git di Windows. Jadi, sepertinya "hang" saat ditekan, di mana ia benar-benar menunggu kata sandi Anda. Anda dapat menghindari ini dengan menggunakan kunci ssh dan bukannya nama pengguna / kata sandi di git repo Anda, dan melakukan dorongan pertama secara manual di shell (git akan mengingat kata sandi ssh Anda setelah dorongan pertama).

bastibe
sumber
1
Git bash shell sepertinya tidak mengingat kata sandi ssh saya, jadi lebih banyak dorongan hanya melihat hal yang sama.
Ryan
3

Jika Anda belum melakukannya, saya akan merekomendasikan menggunakan SSH daripada HTTP karena banyak yang telah merekomendasikan kepada saya selama penyelidikan saya ini. Yang mengatakan, saya bisa menyelesaikan masalah ini menggunakan FAQ di bawah ini:

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

Komponen yang hilang (dari skrip Git Bash .bashrc Github) adalah bahwa ia tidak menangani startup ssh-agent untuk antarmuka seperti baris perintah Windows atau emacs. Mengikuti langkah-langkah di atas memulai ssh-agent pada emacs startup. Catatan, Anda harus memulai Git Bash dan memasukkan frasa sandi SSH Anda setelah memulai / memulai ulang mesin Anda.

Pencocokan Pola
sumber
2

Saya juga telah mengalami perilaku ini untuk sementara waktu, dan sampai hari ini belum sempat untuk benar-benar berusaha memperbaikinya. Saya melakukannya dengan menempatkan yang berikut ini di file init saya:

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

Saya juga menguji ini dengan membuka Emacs bersih ( emacs -Q), memuat magit, dan mengevaluasi baris itu, dan itu berhasil.

Ini berfungsi dengan baik Pageant, jadi tidak perlu dipusingkan ssh-agent.

Scott Weldon
sumber
1
Bagi saya ini adalah solusi terbaik untuk seseorang yang menginstal command-line git dan executable terkait Putty seperti pageant.
Tom Purl
1

Jika Anda sudah menginstal Cygwin, Anda dapat menggunakan gantungan kunci dan lingkungan gantungan kunci untuk mengelola kunci Anda.

Gunakan cangkang pilihan Anda untuk meluncurkan gantungan kunci, lalu

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

untuk memastikan kunci dimuat ke Emacs.

Jonathan Leech-Pepin
sumber
Hmmm. Saya mencoba ini, dan tidak ada yang benar-benar berubah. The magit-pushperintah digantung seperti yang selalu terjadi.
Ryan
1

Saya tidak pernah menemukan cara untuk memperbaikinya hanya dengan MSYS Git dan Emacs, tapi inilah solusinya.

Tambahkan Git Credential Winstore ke $ PATH Anda. Git-Credential-Winstore akan menggunakan gantungan kunci Windows untuk mengelola kata sandi Anda dan Magit akan dengan senang hati mendorong repositori jarak jauh.

Di .gitconfigfile Anda , atur yang berikut ini:

[credential]
        helper = "winstore"

Ini berfungsi karena Documents Kredensial Git menyatakan bahwa "jika nama helper bukan path absolut, maka string git credential- didahulukan." Saya lebih suka pendekatan ini.

Sebagai alternatif, Anda cukup menjalankan git-credential-winstore.exe dan itu akan menginstal sendiri ke folder AppData Anda dan mengisi .gitconfigfile Anda dengan jalur hardcoded ke lokasi itu. Setelah menjalankannya, Anda .gitconfigakan terlihat seperti ini:

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

Tanda seru memerintahkan Git untuk memperlakukan string sebagai jalur absolut.

Joe
sumber
0

Seperti yang ditunjukkan @bastibe, Magit mungkin sedang menunggu input kata sandi dan hanya menggantung di sana ...

Saya ingat yang berikut ini berfungsi ketika saya terpaksa menggunakan Windows :-). Saya tidak ingat nama perintah yang tepat, juga memastikan bahwa exec-pathmengandung c:/Program Files (x86)/Git/bin/.

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

Saya menjalankan runemacs.exe dari shell git. Sekarang git push dari magit bekerja.

Majid alDosari
sumber
1
Ini sepertinya tidak berhubungan dengan pertanyaan dengan cara apa pun. Jika Anda bermaksud menjawab pertanyaan, harap edit jawaban Anda yang menjelaskan bagaimana menjalankan sesuatu runemacsyang terkait dengan magit.
Gilles 'SO- stop being evil'
bagus. saya ditandai untuk dihapus sebelum saya bahkan mendapatkan kesempatan untuk menjelaskan dengan lebih baik? ini merupakan jawaban (solusi) untuk masalah tersebut.
Majid alDosari
1
Saya kira jawabannya tidak perlu dibatalkan. Tetapi mungkin lebih baik untuk menjelaskan alasan mengapa ia bekerja (jika berjalan dari Git shell di windows, beberapa variabel lingkungan akan diinisialisasi secara berbeda di Emacs, ini juga akan menyebabkan Magit dapat berinteraksi dengan Git dengan cara yang dipahami). Mungkin cara OP mencoba menjalankan perintah Magit berinteraksi dengan Git dengan cara yang tidak diharapkan Magit.
wvxvw
1
Ini jawabannya. Pengguna mungkin tidak tahu mengapa itu membuat perbedaan, tetapi mereka mengatakan apa yang berhasil dalam kasus mereka.
Malabarba