magit-đẩy treo trên Windows


10

Tôi đang sử dụng GNU Emacs trên Windows và tôi không thể sử dụng magit-pushđể đẩy các thay đổi cục bộ của mình sang kho lưu trữ từ xa. Điều này xảy ra với các kho lưu trữ từ xa bất kể chúng được truy cập bằng SSH hay HTTPS. Tôi cần làm gì để thực hiện magit-pushcông việc trên Windows một cách liền mạch (hoặc ít nhất là gần như vậy) như trên các máy Linux của tôi?

Tất cả những gì tôi thấy trong *Messages*bộ đệm là

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

Điều tương tự cho thấy trong *magit-process*bộ đệm, nhiều hay ít. Không có gì hữu ích hơn. Tôi có thể git đẩy từ dòng lệnh, nhưng nó yêu cầu mật khẩu của khóa ssh của tôi. Có thể đó là vấn đề? Tôi đã thử tải khóa bằng Pagete (đại lý chính của PuTTY), nhưng dường như điều đó không tạo ra sự khác biệt.

Nếu nó hữu ích, tôi đã cài đặt Cygwin và sẽ rất vui với giải pháp liên quan đến việc buộc Emacs sử dụng các tệp thực thi của Cygwin.

Câu trả lời:


6

Wiki của Magit hiện có một trang về những cách khác nhau mà người ta có thể đẩy từ Magit khi sử dụng MS Windows. Ngoài ra kiểm tra các ssh-agencygói mới . Cả trang wiki và gói được viết bởi @npostavs.

Cũng lưu ý rằng hầu như không bao giờ là lỗi của Magit nếu bạn không thể đẩy. Đây thường là sự cố cấu hình (ngay cả khi bạn có thể đẩy từ vỏ nhưng không phải khi sử dụng Magit).


6

Thông thường, vấn đề là Emacs không thể truy cập dấu nhắc mật khẩu của git trên Windows. Do đó, nó dường như "treo" khi đẩy, nơi nó thực sự đang chờ mật khẩu của bạn. Bạn có thể phá vỡ điều này bằng cách sử dụng khóa ssh thay vì tên người dùng / mật khẩu trong repo git của bạn và thực hiện lần đẩy đầu tiên bằng tay trong shell (git sẽ nhớ mật khẩu ssh của bạn sau lần đẩy đầu tiên).


1
Shell bash Git dường như không nhớ mật khẩu ssh của tôi, vì vậy nhiều lần đẩy hơn chỉ nhìn thấy điều tương tự.
Ryan

3

Nếu bạn chưa làm như vậy, tôi sẽ khuyên bạn nên sử dụng SSH thay vì HTTP như nhiều người đã khuyên tôi trong quá trình điều tra về việc này. Điều đó nói rằng, tôi đã có thể giải quyết vấn đề này bằng cách sử dụng Câu hỏi thường gặp bên dưới:

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

Thành phần còn thiếu (từ tập lệnh Git Bash .bashrc của Github) là nó không xử lý khởi động tác nhân ssh cho các giao diện như dòng lệnh Windows hoặc emacs. Thực hiện theo các bước trên khởi tạo ssh-agent khi khởi động emacs. Lưu ý, bạn sẽ phải khởi động Git Bash và nhập cụm mật khẩu SSH khi bắt đầu / khởi động lại máy.


2

Tôi cũng đã trải qua hành vi này trong một thời gian và cho đến hôm nay vẫn chưa thực sự cố gắng khắc phục nó. Tôi đã làm như vậy bằng cách đặt như sau trong tập tin init của tôi:

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

Tôi cũng đã kiểm tra điều này bằng cách mở một Emacs ( emacs -Q) sạch , tải magitvà đánh giá dòng đó và nó đã hoạt động.

Điều này làm việc với Pageant, vì vậy không cần phải lộn xộn ssh-agent.


1
Đối với tôi đây là giải pháp tốt nhất cho ai đó đã cài đặt git dòng lệnh và các tệp thực thi liên quan đến PuTTY như cuộc thi.
Tom Purl

1

Nếu bạn đã cài đặt Cygwin, bạn có thể sử dụng móc khóamôi trường móc khóa để quản lý các khóa của mình.

Sử dụng vỏ bạn chọn để khởi chạy móc khóa, sau đó

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

để đảm bảo các khóa được tải vào Emacs.


Hừm. Tôi đã thử điều này, và không có gì thực sự thay đổi. Các magit-pushlệnh treo giống như nó luôn luôn làm.
Ryan

1

Tôi chưa bao giờ tìm ra cách khắc phục điều này chỉ với MSYS Git và Emacs, nhưng đây là cách giải quyết liền mạch.

Thêm Git Credential Winstore vào $ PATH của bạn. Git-Credential-Winstore sẽ sử dụng móc khóa Windows để quản lý mật khẩu cho bạn và Magit sẽ vui vẻ đẩy đến các kho lưu trữ từ xa.

Trong .gitconfigtệp của bạn , đặt như sau:

[credential]
        helper = "winstore"

Điều này hoạt động vì Tài liệu chứng chỉ Git nói rằng "nếu tên người trợ giúp không phải là một đường dẫn tuyệt đối, thì chuỗi thông tin git - được thêm vào trước." Tôi thích cách tiếp cận này.

Thay phiên, bạn có thể chỉ cần chạy git-cert-winstore.exe và nó sẽ tự cài đặt vào thư mục AppData của bạn và điền vào .gitconfigtệp của bạn một đường dẫn được mã hóa cứng đến vị trí của nó. Sau khi chạy nó, bạn .gitconfigsẽ trông như thế này:

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

Dấu chấm than chỉ thị cho Git coi chuỗi là một đường dẫn tuyệt đối.


0

Như @bastibe đã chỉ ra, Magit có lẽ đang chờ nhập mật khẩu và chỉ bị treo ở đó ...

Tôi nhớ lại các hoạt động sau đây khi tôi buộc phải sử dụng Windows :-). Tôi không nhớ tên lệnh chính xác, cũng đảm bảo rằng nó exec-pathchứa c:/Program Files (x86)/Git/bin/.

(setenv "GIT_ASKPASS" "git-gui--askpass")

0

Tôi đã chạy runemacs.exe từ vỏ git. Bây giờ git đẩy từ magit hoạt động.


1
Điều này dường như không liên quan đến câu hỏi theo bất kỳ cách nào. Nếu bạn muốn trả lời câu hỏi, xin vui lòng chỉnh sửa câu trả lời của bạn giải thích cách chạy runemacsbằng cách nào đó có liên quan đến phép thuật.
Gilles 'SO- ngừng trở nên xấu xa'

đẹp. tôi được đánh dấu để xóa trước khi tôi thậm chí có cơ hội để giải thích rõ hơn? đó là một câu trả lời (giải pháp) cho vấn đề.
Majid alDosari 14/03/2015

1
Tôi không nghĩ rằng câu trả lời xứng đáng bị đánh giá thấp. Nhưng có lẽ tốt hơn để giải thích lý do tại sao nó hoạt động (nếu chạy từ Git shell trên windows, một số biến môi trường sẽ được khởi tạo khác nhau trong Emacs, điều này cũng sẽ khiến Magit có thể tương tác với Git theo cách nó hiểu). Có lẽ cách OP cố gắng chạy các lệnh Magit tương tác với Git theo cách mà Magit không mong đợi.
wvxvw

1
Đây là một câu trả lời. Người dùng có thể không biết tại sao nó lại tạo ra sự khác biệt, nhưng họ đang nói những gì hoạt động trong trường hợp của họ.
Malabarba 14/03/2015
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.