OSX 10.10 yosemite beta trên git pull: git-sh-setup: Không có tệp hoặc thư mục như vậy


90

Sau khi nâng cấp lên OSX 10.10 Yosemite Beta, việc chạy git pulltrả về lỗi sau:

/ Library / Developer / CommandLineTools / usr / libexec / git-core / git-pull: line 11: git-sh-setup: Không có tệp hoặc thư mục nào như vậy

Tôi đã kiểm tra thư mục git-core được tham chiếu và git-sh-setup.sh ở đó.

Các lệnh git khác đang hoạt động chính xác như mong đợi


3
Tôi cũng đang gặp vấn đề này, ngoại trừ với git stash. Tôi sẽ cho bạn biết nếu tôi tìm một giải pháp
cadlac

Chỉ gặp vấn đề này với zsh ... git dường như hoạt động tốt khi chạy từ bash. Zsh liên quan?
zeekay

12
Đây là một lỗi trong iTerm2 với zsh. iTerm2 đã sửa nó trong bản phát hành mới nhất (v1.0.0.20140629)
rds

Câu trả lời:


100

Tôi nghĩ rằng giải pháp rõ ràng nhất cho điều này lúc này là thay đổi lệnh ban đầu trong phiên iTerm của bạn thành

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

Điều này khắc phục sự cố cho tôi.

Một điểm dữ liệu khác để phân tích vấn đề: Có vẻ như trong 10.10, nhiều bản sao của biến môi trường PATH tồn tại và các biểu mẫu con dường như thích bản sao thứ hai hơn.

Bạn có thể tái tạo điều này bằng cách khởi chạy bất kỳ ứng dụng ca cao nào trên bảng điều khiển do iTerm khởi chạy. Bạn sẽ nhận được một cảnh báo giống như sau:

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'.

Tôi tin rằng đây là một vấn đề trong 10.10 chứ không phải iTerm, nhưng một cái gì đó iTerm đang làm là khiến nó tự hiển thị (điều này không xảy ra trong Terminal.app)

Cập nhật : Điều này là do iTerm đang làm những thứ "thú vị" với môi trường. Cập nhật lên bản phát hành chính thức của iTerm 2.0 để khắc phục sự cố này.


6
Đây phải là câu trả lời chính xác, sửa chữa tuyệt vời. Tuy nhiên, tôi đã đặt lệnh thành /usr/bin/login -f $USER, chỉ để tôi có thể có cùng một hồ sơ trên nhiều tài khoản :)
cadlac

12
Rõ ràng, bash loại bỏ tất cả các biến môi trường trùng lặp. Vì vậy, nếu bạn đặt lệnh thành /bin/bash -c /bin/zshnó sẽ bảo toàn các biến môi trường khác, ví dụ $SSH_AUTH_SOCK.
cypheon

2
Điều này đã khắc phục sự cố cho tôi theo cách rõ ràng nhất cho đến nay. Cảm ơn rất nhiều!
meghaphone

2
Điều này sửa lỗi git. Nhưng bất cứ khi nào tôi cần sử dụng ssh với id_rsa.pub của mình, tôi được yêu cầu nhập cụm mật khẩu. Tôi không phải làm điều này trước khi thay đổi lệnh ban đầu, cũng như trong Terminal.app. Bất kỳ ý tưởng?
ZeR0

5
Tôi nghĩ /bin/bash -c /bin/zshlà tốt hơn /usr/bin/login -f <your user name>, vì nó giữ mã hóa ký tự. /usr/bin/login -f <your user name>mất mã hóa của tôi và tôi không thể hiển thị các tệp của mình như bình thường.
Alpha Liu

35

Tôi tin rằng đây là một lỗi trong iTerm khi sử dụng zsh. Họ cố tình không gọi / usr / bin / login, và họ không sử dụng thực thi để xóa các biến môi trường như họ nên làm.


1
Wow, tôi nghĩ bạn đúng. Tôi đã dành hàng giờ cố gắng để các bản sửa lỗi Git khác nhau hoạt động và hóa ra việc chuyển từ iTerm2 w / zsh sang Terminal mặc định của Yosemite (vẫn với zsh) hoạt động rất tốt. Làm thế nào bạn tìm thấy điều này?
jbnunn

8
Chà, đây là nhóm người cụ thể nhất từ ​​trước đến nay ... Thật là một trường hợp lợi hại.
Drew

2
đó là một phân tích rất tốt. Vì vậy, một giải pháp tốt là đặt lệnh ban đầu trong iTerm thành / usr / bin / login -f <tên người dùng của bạn>.
pilif

13
Một giải pháp khác là đặt lệnh shell đăng nhập trong iTerm thành/bin/bash -c /bin/zsh
Vince

1
Thay đổi từ login shellthành commandtrong phần Tùy chọn> Hồ sơ> Chung và sử dụng /bin/bash -c /bin/zahnhư @Sorenly đã đề xuất, đã sửa lỗi này ngay!
jlmakes

20

Việc tải xuống phiên bản iTerm2 mới nhất đã khắc phục sự cố này cho tôi!


1
Nếu bạn muốn giải quyết nó mà không cần chứng minh rằng bạn là một kỹ thuật viên ..., chỉ cần làm điều này. Nhờ Marthyn ...
Krishnaprasad Varma

Như các nhận xét bên dưới đã nói, có vẻ như iTerm và zsh kết hợp với nhau ngăn cản các kéo git hoạt động. Đi tới iTerm2 sẽ sửa nó.
MikeHoss

4
Để làm rõ @MikeHoss, iTerm2 phiên bản 1.0.x không hoạt động, nhưng iTerm2 phiên bản 2.0.x thì có. Cả hai đều là iTerm2, nhưng phiên bản mới là điều quan trọng.
Kevin Cooper

16

Một giải pháp khác, sửa đổi iTerm2 của bạn

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

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

chmod +x iTerm

Làm xong.

Hãy tận hưởng iTerm2 của bạn với Yosemite!


iTerm2 là vấn đề và đây là một trong những giải pháp tốt nhất cho vấn đề. Thanh danh.
ocodo

Tôi đã gặp sự cố này ngay cả trên bản phát hành công khai 10.10 và điều này đã khắc phục được sự cố. Cảm ơn Phong!
Ash Furrow

13

Như một giải pháp tạm thời, tôi đã sửa đổi git-pull dòng 11, 12 và 336 thành:

. /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"

Hiện tại, bản sửa lỗi này sẽ sửa lỗi git-pull, nhưng tôi chắc chắn rằng có một giải pháp tốt hơn.


2
Tôi cũng đã phải thay đổi như 231 đến. /usr/local/Cellar/git/2.0.0/libexec/git-core/git-parse-remote
Keith Smiley

2
Trong trường hợp cần thay đổi điều này, tôi đã thiết lập điểm của mình để trỏ tới $GIT_PATH/git-sh-setup, v.v.
TheJF

1
Tôi đang nhận được /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?Sau khi áp dụng bản sửa lỗi này, có ai có ý tưởng phải làm gì không?
Drew

@Andrew Cái này thật tệ nhưng tôi đã phải chuyển sang cài đặt git-sh-setup và thay thế tất cả gitbằng /usr/local/bin/git. Có một số trường hợp gitgit-pull cũng phải được thay thế
jbnunn

3

Đây là bản sửa lỗi tạm thời (giả sử Homebrew và Git 2.0.0) nếu bạn cần Git hoạt động trước khi có bản sửa lỗi chính thức. Tôi thiết lập hai biến shell:

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"

... và sau đó thay thế các trường hợp gitbằng các liên kết tuyệt đối thích hợp. Bạn có thể sử dụng Gists sau đây để làm tương tự:

  • Thay thế /usr/local/Cellar/git/2.0.0/libexec/git-core/git-sh-setup/ bằng git-sh-setup
  • Thay thế /usr/local/Cellar/git/2.0.0/libexec/git-core/git-stash/ bằng git-stash
  • Thay thế /usr/local/Cellar/git/2.0.0/libexec/git-core/git-pull/ bằng git-pull

Đây chắc chắn là một vụ hack, nhưng nó sẽ giúp bạn thực hiện được.

CHỈNH SỬA: Đảm bảo rằng bạn đã xem câu trả lời từ @pilif trước khi thực hiện việc này ...


1

Cách giải quyết của Ubiquill cũng áp dụng cho git rebase (và có lẽ là bất kỳ chức năng nào khác không hoạt động). Trong trường hợp đó, nó yêu cầu thay thế các dòng 47 và 48 bằng các dòng sau *:

. /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

* Đường dẫn này giả định rằng bạn đã cài đặt git với homebrew và nó nằm bên trong /usr/local/Cellar/git/2.0.0/.


1

Chỉnh sửa tệp git-pull của bạn và thêm dòng này lên trên nó (ngay sau khối nhận xét)

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

Hoặc chỉ cần sao chép, dán cái này vào thiết bị đầu cuối của bạn:

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

Cập nhật: Theo giả định của pilif , kể từ bản cập nhật iTerm2 cuối cùng (1.0.0.20140629), git-pullchạy đúng cách mà không có PATHghi đè này .


Đây dường như là giải pháp duy nhất để tiến thêm một bước trong cấu hình của tôi. Sau khi thêm dòng PATH, tôi gặp lỗi này khi cố gắng PULL: git: 'credential-osxkeychain' không phải là lệnh git. Xem 'git --help'. Bất kỳ ý tưởng?
kiks73


0

CẬP NHẬT: vẫn không hoạt động với bản phát hành được đề cập bên dưới, lỗi của tôi. Git push hoạt động Git pull không.

Đối với tôi, có vẻ như sự cố đã được Apple khắc phục với Mac OS X Yosemite 10.10 ( 14A329r ). tôi đang sử dụng kênh Beta Yosemite nói chung (không phải nhà phát triển). Git đẩy /kéo hoạt động như mong đợi một lần nữa mà không có bất kỳ sửa đổi.


Không, tôi đang gặp phải các biến môi trường trùng lặp trên 14A329r, vì vậy nó chưa được sửa trên bản dựng đó.
Zr40

@ Zr40 thx. bạn đúng rồi. bằng cách nào đó Git push hoạt động ngay bây giờ? đối với tôi nhưng Git pull vẫn KHÔNG hoạt động.
Frank Lämmer
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.