Windows에서 magit-push가 중단됨


10

Windows에서 GNU Emacs를 사용 magit-push하고 있으며 로컬 변경 사항을 원격 저장소로 푸시하는 데 사용할 수 없습니다 . 이는 SSH 또는 HTTPS로 액세스하는지에 관계없이 원격 저장소에서 발생합니다. magit-pushLinux 컴퓨터에서와 마찬가지로 Windows에서 완벽하게 (또는 최소한 거의) 작업을 하려면 어떻게해야 합니까?

*Messages*버퍼 에 보이는 것은

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

*magit-process*버퍼에 동일하게 표시됩니다 . 더 유용한 것은 없습니다. 커맨드 라인에서 git push를 사용할 수는 있지만 ssh 키의 비밀번호를 묻습니다. 그게 문제가 될 수 있습니까? Pageant (PuTTY의 키 에이전트)로 키를로드하려고 시도했지만 차이가 없었습니다.

도움이된다면 Cygwin을 설치했으며 Emacs가 Cygwin의 실행 파일을 사용하도록 강요하는 솔루션에 만족할 것입니다.

답변:


6

Magit의 Wiki는 이제 MS Windows를 사용할 때 Magit에서 푸시 할 수있는 다양한 방법에 대한 페이지 를 제공합니다. 새 ssh-agency패키지 도 확인하십시오 . 위키 페이지와 패키지는 모두 @npostavs에 의해 작성되었습니다.

또한 밀 수 없다면 사실상 Magit의 잘못이 아닙니다. 일반적으로 구성 문제입니다 (Magit을 사용하지 않는 경우 쉘에서 푸시 할 수있는 경우에도).


6

일반적으로 문제는 Windows에서 Emacs가 git의 비밀번호 프롬프트에 액세스 할 수 없다는 것입니다. 따라서 실제로 비밀번호를 기다리고있는 곳에서 "걸려"있는 것처럼 보입니다. git repo에서 username / password 대신 ssh 키를 사용하고 쉘에서 수동으로 첫 번째 푸시를 수행하여이를 피할 수 있습니다 (git은 첫 번째 푸시 후 ssh 비밀번호를 기억합니다).


1
Git bash 쉘은 내 ssh 비밀번호를 기억하지 않는 것 같으므로 더 많은 푸시가 동일한 것을보고 있습니다.
Ryan

3

아직 그렇게하지 않았다면,이 문제를 조사하는 동안 많은 사람들이 추천 한 것처럼 HTTP 대신 SSH를 사용하는 것이 좋습니다. 즉, 아래 FAQ를 사용 하여이 문제를 해결할 수있었습니다.

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

누락 된 구성 요소 (Github의 Git Bash .bashrc 스크립트에서)는 Windows 명령 줄 또는 emacs와 같은 인터페이스의 ssh-agent 시작을 처리하지 않는다는 것입니다. 위 단계에 따라 emacs 시작시 ssh-agent가 시작됩니다. 머신을 시작 / 다시 시작할 때 Git Bash를 시작하고 SSH 암호를 입력해야합니다.


2

나도이 동작을 한동안 경험해 왔으며 오늘까지 실제로 그것을 고치려고 노력하지 않았다. 내 init 파일에 다음을 배치하여 그렇게했습니다.

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

또한 깨끗한 Emacs ( emacs -Q) 를 열고 ,로드하고 magit, 해당 라인을 평가 하여 이것을 테스트 했으며 작동했습니다.

이것과 함께 작동 Pageant하므로 엉망 일 필요가 없습니다 ssh-agent.


1
나에게 이것은 커맨드 라인 git과 pageant와 같은 PuTTY 관련 실행 파일을 설치 한 사람에게 가장 좋은 솔루션이었습니다.
Tom Purl

1

Cygwin을 이미 설치 한 경우 키 체인키 체인 환경 을 사용하여 키를 관리 할 수 ​​있습니다.

원하는 쉘을 사용하여 키 체인을 시작한 다음

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

키가 Emacs에로드되도록합니다.


흠. 나는 이것을 시도했지만 아무것도 바뀌지 않았다. magit-push명령은 항상 않는 것처럼 걸려.
Ryan

1

나는 MSYS Git과 Emacs 로이 문제를 해결하는 방법을 찾지 못했습니다. 그러나 완벽한 해결 방법이 있습니다.

Git Credential Winstore 를 $ PATH에 추가하십시오 . Git-Credential-Winstore는 Windows 키 체인을 사용하여 암호를 관리하며 Magit은 원격 저장소로 즐겁게 푸시합니다.

당신의에서 .gitconfig파일, 다음을 설정합니다

[credential]
        helper = "winstore"

이것은 Git Credential Docs 에서 "헬퍼 이름이 절대 경로가 아닌 경우 문자열 git credential-이 앞에 붙습니다"라고 표시 하기 때문에 작동합니다 . 이 방법을 선호합니다.

또는 단순히 git-credential-winstore.exe를 실행하면 AppData 폴더에 설치되고 .gitconfig파일의 위치에 하드 코드 된 경로로 파일을 채 웁니다 . 그것을 실행 .gitconfig하면 다음과 같이 보일 것입니다.

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

느낌표는 Git에게 문자열을 절대 경로로 취급하도록 지시합니다.


0

@bastibe가 지적했듯이 Magit은 아마도 암호 입력을 기다리고있을 것입니다 ...

Windows를 강제로 사용했을 때 다음과 같은 작업을 생각합니다. :-). 정확한 명령 이름을 기억하지 못하고 exec-pathcontains 포함되어 있는지 확인하십시오 c:/Program Files (x86)/Git/bin/.

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

0

git shell에서 runemacs.exe를 실행했습니다. 이제 magit의 git push가 작동합니다.


1
이것은 어떤 식 으로든 질문과 관련이없는 것 같습니다. 질문에 대답하려는 경우 달리기 runemacs가 달리기 ( magit)와 어떤 관련이 있는지 설명하는 답변을 편집하십시오 .
Gilles 'SO- 악마 그만해'

좋은. 더 잘 설명 할 기회를 갖기 전에 삭제 표시를 받습니까? 문제에 대한 해답입니다.
Majid alDosari

1
나는 그 대답이 다운 투표 될 가치가 있다고 생각하지 않습니다. 그러나 그것이 왜 작동했는지 이유를 설명하는 것이 좋습니다 (창의 Git 셸에서 실행하면 일부 환경 변수가 Emacs에서 다르게 초기화되어 Magit이 이해하는 방식으로 Git과 상호 작용할 수 있습니다). OP가 Magit 명령을 실행하려고 시도한 방식은 Magit이 예상하지 않은 방식으로 Git과 상호 작용했습니다.
wvxvw

1
이것이 답이다. 사용자는 차이가 있었 는지 알 수 없지만 자신의 경우에 효과가 있다고 말하고 있습니다.
Malabarba
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.