magit-push hangs บน Windows


10

ฉันใช้ GNU Emacs บน Windows และฉันไม่สามารถใช้magit-pushเพื่อผลักดันการเปลี่ยนแปลงในพื้นที่ของฉันไปยังที่เก็บข้อมูลระยะไกล สิ่งนี้เกิดขึ้นกับที่เก็บข้อมูลระยะไกลโดยไม่คำนึงว่าจะเข้าถึง SSH หรือ HTTPS ได้หรือไม่ ฉันต้องทำอะไรเพื่อให้magit-pushทำงานบน Windows ได้อย่างราบรื่น (หรืออย่างน้อยก็เกือบจะ) บนเครื่อง Linux ของฉัน?

สิ่งที่ฉันเห็นใน*Messages*บัฟเฟอร์คือ

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

การแสดงแบบเดียวกันใน*magit-process*บัฟเฟอร์ไม่มากก็น้อย ไม่มีประโยชน์อะไรมากกว่านี้ ฉันสามารถคอมไพล์จากบรรทัดคำสั่งได้ แต่มันขอรหัสผ่านของคีย์ ssh อาจเป็นปัญหาหรือไม่ ฉันพยายามโหลดกุญแจด้วย Pageant (ตัวแทนกุญแจของ PuTTY) แต่นั่นไม่ได้สร้างความแตกต่าง

หากมีประโยชน์ฉันได้ติดตั้ง Cygwin และยินดีที่จะมีวิธีแก้ปัญหาที่เกี่ยวข้องกับการบังคับให้ Emacs ใช้โปรแกรมปฏิบัติการของ Cygwin

คำตอบ:


6

ตอนนี้วิกิของ Magit มีหน้าเกี่ยวกับวิธีการต่าง ๆ ที่สามารถส่งมาจาก Magit เมื่อใช้ MS Windows เช็คเอาต์ssh-agencyแพ็คเกจใหม่ด้วย ทั้งหน้า wiki และแพ็คเกจถูกเขียนโดย @npostavs

นอกจากนี้โปรดทราบว่าเป็นความผิดของ Magit หากคุณไม่สามารถผลักดันได้ โดยปกติจะเป็นปัญหาการกำหนดค่า (แม้ว่าคุณจะสามารถกดจากเชลล์ได้ แต่ไม่ใช่เมื่อใช้ Magit)


6

โดยทั่วไปปัญหาคือ Emacs ไม่สามารถเข้าถึงพรอมต์รหัสผ่านของ git บน Windows ได้ ดังนั้นดูเหมือนว่า "แฮงค์" เมื่อกดซึ่งจะรอรหัสผ่านของคุณ คุณสามารถหลีกเลี่ยงสิ่งนี้ได้โดยใช้ปุ่ม ssh แทนชื่อผู้ใช้ / รหัสผ่านใน repo git ของคุณและทำการกดครั้งแรกด้วยตนเองในเชลล์ (git จะจดจำรหัสผ่าน ssh ของคุณหลังจากการกดครั้งแรก)


1
เชลล์ทุบตี Git ดูเหมือนจะไม่ได้จดจำรหัสผ่าน ssh ของฉันดังนั้นการเพิ่มจำนวนมากก็แค่เห็นสิ่งเดียวกัน
Ryan

3

หากคุณยังไม่ได้ดำเนินการฉันขอแนะนำให้ใช้ SSH แทน HTTP เนื่องจากมีหลายคนแนะนำให้ฉันในระหว่างการตรวจสอบเรื่องนี้ ที่กล่าวว่าฉันสามารถแก้ไขปัญหานี้ได้โดยใช้คำถามที่พบบ่อยด้านล่าง:

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

องค์ประกอบที่ขาดหายไป (จากสคริปต์ Git Bash .bashrc ของ Github) คือมันไม่ได้จัดการการเริ่มต้น ssh-agent สำหรับอินเทอร์เฟซเช่นบรรทัดคำสั่ง Windows หรือ emacs ทำตามขั้นตอนข้างต้นเริ่มต้น ssh-agent เมื่อ emacs เริ่มต้น หมายเหตุคุณจะต้องเริ่ม Git Bash และป้อนรหัสผ่าน SSH ของคุณเมื่อเริ่มต้น / รีสตาร์ทเครื่อง


2

ฉันก็เคยประสบพฤติกรรมเช่นนี้มาระยะหนึ่งแล้วและจนถึงวันนี้ก็ยังไม่ได้พยายามแก้ไข ฉันทำได้โดยวางสิ่งต่อไปนี้ในไฟล์ init ของฉัน:

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

ฉันยังทดสอบสิ่งนี้โดยเปิด Emacs ( emacs -Q) ที่สะอาดโหลดmagitและประเมินบรรทัดนั้นและใช้งานได้

นี้ทำงานร่วมกับจึงมีความจำเป็นต้องไปยุ่งกับPageantssh-agent


1
สำหรับฉันนี่เป็นทางออกที่ดีที่สุดสำหรับคนที่ติดตั้งคอมไพล์บรรทัดคำสั่งและไฟล์ที่เกี่ยวข้องกับ PuTTY เช่นโปรแกรมประกวด
Tom Purl

1

หากคุณได้ติดตั้ง Cygwin ไว้แล้วคุณสามารถใช้KeychainและKeychain-environmentเพื่อจัดการคีย์ของคุณ

ใช้เปลือกที่คุณเลือกเพื่อเปิดพวงกุญแจแล้ว

(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ระบุว่า "ถ้าชื่อตัวช่วยไม่ใช่เส้นทางที่สมบูรณ์แบบดังนั้นข้อมูลประจำตัวของสตริง git - จะถูกนำเสนอ" ฉันชอบวิธีนี้

อีกทางหนึ่งคุณสามารถเรียกใช้ 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-pathc:/Program Files (x86)/Git/bin/

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

0

ฉันรัน runemacs.exe จากเชลล์คอมไพล์ ตอนนี้คอมไพล์ผลักดันจาก magit ทำงาน


1
ดูเหมือนจะไม่เกี่ยวข้องกับคำถาม แต่อย่างใด หากคุณต้องการตอบคำถามโปรดแก้ไขคำตอบของคุณซึ่งอธิบายว่าการทำงานrunemacsเกี่ยวข้องกับเวทมนต์อย่างไร
Gilles 'หยุดความชั่วร้าย'

ดี ฉันถูกทำเครื่องหมายสำหรับการลบก่อนที่ฉันจะมีโอกาสอธิบายได้ดีขึ้นหรือไม่ มันเป็นคำตอบ (แก้ไข) ปัญหา
Majid alDosari

1
ฉันไม่คิดว่าคำตอบควรจะถูกลดระดับลง แต่มันอาจเป็นการดีกว่าที่จะอธิบายเหตุผลที่มันใช้งานได้ (ถ้าทำงานจากเชลล์ Git บน windows ตัวแปรสภาพแวดล้อมบางอย่างจะเริ่มต้นแตกต่างกันใน Emacs ซึ่งจะทำให้ Magit สามารถโต้ตอบกับ Git ในแบบที่เข้าใจ) บางทีวิธีที่ OP พยายามเรียกใช้คำสั่ง Magit โต้ตอบกับ Git ในแบบที่ Magit ไม่คาดคิด
wvxvw

1
นี่คือคำตอบ ผู้ใช้อาจไม่รู้ว่าทำไมถึงสร้างความแตกต่าง แต่พวกเขากำลังพูดว่าอะไรทำงานได้ดีในกรณีของพวกเขา
Malabarba
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.