OSX 10.10 yosemite beta บน git pull: git-sh-setup: ไม่มีไฟล์หรือไดเร็กทอรีดังกล่าว


90

หลังจากอัปเกรดเป็น OSX 10.10 Yosemite Beta การรันกำลังgit pullส่งคืนข้อผิดพลาดต่อไปนี้:

/ Library / Developer / CommandLineTools / usr / libexec / git-core / git-pull: บรรทัดที่ 11: git-sh-setup: ไม่มีไฟล์หรือไดเร็กทอรีดังกล่าว

ฉันได้ตรวจสอบไดเร็กทอรี git-core ที่อ้างอิงและ git-sh-setup.sh อยู่ที่นั่น

คำสั่ง git อื่น ๆ ทำงานได้ตามที่คาดไว้


3
ฉันมีปัญหานี้เช่นกันยกเว้นกับgit stash. ฉันจะแจ้งให้คุณทราบหากพบวิธีแก้ไข
cadlac

เพิ่งมีปัญหานี้กับ zsh ... git ดูเหมือนจะทำงานได้ดีเมื่อเรียกใช้จาก bash Zsh เกี่ยวข้องไหม
zeekay

12
นี่เป็นจุดบกพร่องใน iTerm2 กับ zsh iTerm2 ได้รับการแก้ไขในรุ่นล่าสุด (v1.0.0.20140629)
rds

คำตอบ:


100

ฉันคิดว่าทางออกที่ดีที่สุดสำหรับตอนนี้คือการเปลี่ยนคำสั่งเริ่มต้นในเซสชัน iTerm ของคุณให้เป็น

/usr/bin/login -f <your user name>

วิธีนี้ช่วยแก้ปัญหาให้ฉันได้

จุดข้อมูลเพิ่มเติมสำหรับการวิเคราะห์ปัญหา: ดูเหมือนว่าใน 10.10 มีสำเนาของตัวแปรสภาพแวดล้อม PATH หลายชุดและ subshells ดูเหมือนจะชอบสำเนาที่สอง

คุณสามารถทำซ้ำได้โดยเปิดแอปพลิเคชันโกโก้บนคอนโซลตามที่ iTerm เปิดตัว คุณจะได้รับคำเตือนที่มีลักษณะดังนี้:

2014-06-04 19:23:09.859 gitx[14676:362580] *** -[NSProcessInfo environment]: Warning: duplicate definition for key 'PATH' found in environment -- subsequent definitions are ignored.  The first definition was '(the path I have configured in my shell)', the ignored definition is '/usr/bin:/bin:/usr/sbin:/sbin'.

ฉันเชื่อว่านี่เป็นปัญหาใน 10.10 ไม่ใช่ iTerm แต่สิ่งที่ iTerm กำลังทำอยู่ทำให้มันปรากฏขึ้น (สิ่งนี้ไม่เกิดขึ้นใน Terminal.app)

อัปเดต : สิ่งนี้เกิดจาก iTerm ทำสิ่งที่ "น่าสนใจ" ต่อสิ่งแวดล้อม อัปเดตเป็นรุ่นอย่างเป็นทางการของ iTerm 2.0 เพื่อให้ปัญหานี้หมดไป


6
นี่ควรเป็นคำตอบที่ถูกต้องแก้ไขได้อย่างน่าทึ่ง อย่างไรก็ตามฉันตั้งค่าคำสั่งเป็น/usr/bin/login -f $USERเพียงเพื่อให้ฉันมีโปรไฟล์เดียวกันในหลายบัญชี :)
cadlac

12
เห็นได้ชัดว่า bash ลบตัวแปรสภาพแวดล้อมที่ซ้ำกันทั้งหมด ดังนั้นถ้าคุณตั้งค่าคำสั่งเพื่อ/bin/bash -c /bin/zshจะรักษาตัวแปรสภาพแวดล้อมอื่น ๆ $SSH_AUTH_SOCKเช่น
cypheon

2
สิ่งนี้ได้แก้ไขปัญหาให้ฉันด้วยวิธีที่สะอาดที่สุดจนถึงตอนนี้ ขอบคุณมาก!
meghaphone

2
สิ่งนี้แก้ไขคอมไพล์ แต่เมื่อใดก็ตามที่ฉันต้องการใช้ ssh กับ id_rsa.pub ของฉันฉันจะถูกขอให้ป้อนข้อความรหัสผ่าน ฉันไม่ต้องทำสิ่งนี้ก่อนที่จะเปลี่ยนคำสั่งเริ่มต้นหรือใน Terminal.app ความคิดใด ๆ ?
ZeR0

5
ฉันคิดว่า/bin/bash -c /bin/zshดีกว่า/usr/bin/login -f <your user name>เพราะมันช่วยให้การเข้ารหัสอักขระ /usr/bin/login -f <your user name>สูญเสียการเข้ารหัสของฉันและฉันไม่สามารถแสดงไฟล์ของฉันได้ตามปกติ
Alpha Liu

35

ฉันเชื่อว่านี่เป็นข้อบกพร่องใน iTerm เมื่อใช้ zsh พวกเขาจงใจไม่เรียกใช้ / usr / bin / login และพวกเขาไม่ได้ใช้ execle เพื่อล้างตัวแปรสภาพแวดล้อมอย่างที่ควรจะเป็น


1
ว้าวฉันคิดว่าคุณพูดถูก ฉันใช้เวลาหลายชั่วโมงในการพยายามแก้ไข Git ต่างๆให้ทำงานและปรากฎว่าการเปลี่ยนจาก iTerm2 w / zsh เป็น Terminal เริ่มต้นของ Yosemite (ยังคงใช้ zsh) ใช้งานได้ดี คุณพบสิ่งนี้ได้อย่างไร?
jbnunn

8
นี่คือกลุ่มคนที่เฉพาะเจาะจงที่สุดเท่าที่เคยมีมา ...
Drew

2
นั่นเป็นการวิเคราะห์ที่ดีมาก วิธีแก้ปัญหาที่ดีคือการตั้งค่าคำสั่งเริ่มต้นใน iTerm เป็น / usr / bin / login -f <your user name>
pilif

13
วิธีแก้ปัญหาอื่นคือการตั้งค่าคำสั่งล็อกอินเชลล์ใน iTerm เป็น/bin/bash -c /bin/zsh
Vince

1
การเปลี่ยนจากlogin shellเป็นcommandในส่วนการตั้งค่า> โปรไฟล์> ทั่วไปและการใช้/bin/bash -c /bin/zahตามที่ @Sorenly แนะนำแก้ไขสิ่งนี้ได้ทันที!
jlmakes

20

การดาวน์โหลด iTerm2 เวอร์ชันล่าสุดได้รับการแก้ไขแล้วสำหรับฉัน!


1
หากคุณต้องการแก้ปัญหาโดยไม่พิสูจน์ว่าคุณเป็นคนชอบเทคนิค ... ให้ทำสิ่งนี้ ขอบคุณ Marthyn ...
Krishnaprasad Varma

ตามที่ความคิดเห็นด้านล่างกล่าวไว้ดูเหมือนว่าจะเป็น iTerm และ zsh ร่วมกันที่ป้องกันไม่ให้ git pull ทำงาน ไปที่ iTerm2 แก้ไขได้
MikeHoss

4
เพื่อชี้แจง @MikeHoss iTerm2 เวอร์ชัน 1.0.x ไม่ทำงาน แต่ iTerm2 เวอร์ชัน 2.0.x ทำ ทั้งสองเป็น iTerm2 แต่เวอร์ชันเป็นสิ่งสำคัญ
Kevin Cooper

16

วิธีอื่นแก้ไข iTerm2 ของคุณ

cd /Applications/iTerm.app/Contents/MacOS
mv iTerm iTerm-bin

cat > iTerm <<EOF
#!/bin/sh
unset PATH
\${0}-bin
EOF

chmod +x iTerm

เสร็จแล้ว

เพลิดเพลินไปกับ iTerm2 ของคุณด้วย Yosemite!


iTerm2 เป็นปัญหาและนี่คือหนึ่งในวิธีแก้ปัญหาที่ดีที่สุด ความรุ่งโรจน์
ocodo

ฉันประสบปัญหานี้แม้กระทั่งในรุ่นสาธารณะ 10.10 และสิ่งนี้ได้รับการแก้ไขแล้ว ขอบคุณฮ!
Ash Furrow

13

ในฐานะโซลูชันชั่วคราวฉันได้แก้ไข git-pull lines 11, 12 และ 336 เป็น:

. /usr/local/Cellar/git/2.0.0/libexec/git-core/git-sh-setup

. /usr/local/Cellar/git/2.0.0/libexec/git-core/git-sh-i18n

eval="/usr/local/Cellar/git/2.0.0/libexec/git-core/git-merge $diffstat $no_commit $verify_signatures $edit $squash $no_ff $ff_only"

ตอนนี้แก้ไข git-pull แต่ฉันแน่ใจว่ามีทางออกที่ดีกว่า


2
ฉันต้องเปลี่ยนเช่น 231 เป็น. /usr/local/Cellar/git/2.0.0/libexec/git-core/git-parse-remote
Keith Smiley

2
ในกรณีที่ฉันต้องการเปลี่ยนแปลงสิ่งนี้ฉันตั้งค่าของฉันให้ชี้ไปที่$GIT_PATH/git-sh-setupฯลฯ
TheJF

1
ฉันได้รับ/usr/local/Cellar/git/2.0.0/libexec/git-core/git-sh-setup: line 334: git: command not found fatal: 'pull' appears to be a git command, but we were not able to execute it. Maybe git-pull is broken?หลังจากใช้การแก้ไขนี้ใครมีความคิดว่าจะทำอย่างไร?
Drew

@ แอนดรูนี่น่าเกลียด แต่ฉันต้องผ่าน git-sh-setup และแทนที่ทั้งหมดgitด้วย/usr/local/bin/git. มีบางกรณีของgitใน git-pull ที่ต้องเปลี่ยน
jbnunn

3

นี่เป็นการแก้ไขชั่วคราว (สมมติว่า Homebrew และ Git 2.0.0) หากคุณต้องการให้ Git ทำงานก่อนที่จะมีการแก้ไขอย่างเป็นทางการ ฉันตั้งค่าตัวแปรเชลล์สองตัว:

export GIT_PATH="/usr/local/Cellar/git/2.0.0/bin"
export GIT_CORE_PATH="/usr/local/Cellar/git/2.0.0/libexec/git-core"

... แล้วแทนที่อินสแตนซ์gitด้วยลิงก์สัมบูรณ์ที่เหมาะสม คุณสามารถใช้ Gists ต่อไปนี้เพื่อทำสิ่งเดียวกัน:

  • แทนที่ /usr/local/Cellar/git/2.0.0/libexec/git-core/git-sh-setup/ด้วยgit-sh-setup
  • แทนที่/usr/local/Cellar/git/2.0.0/libexec/git-core/git-stash/ด้วยgit-stash
  • แทนที่/usr/local/Cellar/git/2.0.0/libexec/git-core/git-pull/ด้วยgit-pull

นี่เป็นการแฮ็กอย่างแน่นอน แต่คุณจะไปได้

แก้ไข: อย่าลืมดูคำตอบจาก @pilif ก่อนทำสิ่งนี้ ...


1

วิธีแก้ปัญหาของ Ubiquill ใช้กับ git rebase (และน่าจะเป็นไปได้ว่าฟังก์ชันอื่น ๆ จะไม่ทำงาน) เช่นกัน ในกรณีนั้นจำเป็นต้องแทนที่บรรทัด 47 และ 48 ด้วยรายการต่อไปนี้ *:

. /usr/local/Cellar/git/2.0.0/libexec/git-core/git-sh-setup
. /usr/local/Cellar/git/2.0.0/libexec/git-core/git-sh-i18n

* เส้นทางนี้จะถือว่าคุณได้ติดตั้งคอมไพล์ด้วย homebrew และอยู่ใน /usr/local/Cellar/git/2.0.0/


1

แก้ไขไฟล์ git-pull ของคุณและเพิ่มบรรทัดนี้ไว้ด้านบน (หลังจากบล็อกความคิดเห็น)

PATH="$(dirname $0):$PATH"

หรือเพียงแค่คัดลอกวางสิ่งนี้ในเทอร์มินัลของคุณ:

ed -s $(which git-pull) <<< $'6i\nPATH="$(dirname $0):$PATH"\n.\nwq'

ปรับปรุง:ในฐานะที่เป็นสันนิษฐานโดยpilifตั้งแต่การปรับปรุง iTerm2 ที่ผ่านมา (1.0.0.20140629) git-pullทำงานอย่างถูกต้องโดยไม่ต้องPATHแทนที่


นี่ดูเหมือนจะเป็นทางออกเดียวที่จะก้าวไปข้างหน้าหนึ่งขั้นในการกำหนดค่าของฉัน หลังจากเพิ่มเส้น PATH ฉันได้รับข้อผิดพลาดนี้เมื่อฉันพยายาม PULL: git: 'credential-osxkeychain' ไม่ใช่คำสั่ง git ดู 'git --help' ความคิดใด ๆ ?
kiks73


0

อัปเดต: ยังไม่ทำงานกับรุ่นที่ระบุไว้ด้านล่างความผิดพลาดของฉัน Git push ใช้งาน Git pull ไม่ได้

สำหรับฉันแล้วดูเหมือนว่าปัญหาได้รับการแก้ไขโดย Apple ด้วยMacOS X Yosemite 10.10 ( 14A329r ) ฉันอยู่ในช่องเบต้า Yosemite ทั่วไป (ไม่ใช่ผู้พัฒนา) Git push /ดึง ทำงานได้ตามที่คาดไว้อีกครั้งโดยไม่มีการแก้ไขใด ๆ


ไม่ฉันพบตัวแปรสภาพแวดล้อมที่ซ้ำกันบน 14A329r ดังนั้นจึงไม่ได้รับการแก้ไขในบิลด์นั้น
Zr40

@ Zr40 thx. คุณพูดถูก ตอนนี้ Git push ทำงานอย่างไร สำหรับฉัน แต่ Git pull ยังไม่ทำงาน
Frank Lämmer
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.