OSX 10.10 yosemite beta di git pull: git-sh-setup: Tidak ada file atau direktori seperti itu

90

Setelah memutakhirkan ke OSX 10.10 Yosemite Beta, menjalankan git pullmengembalikan kesalahan berikut:

/ Library / Developer / CommandLineTools / usr / libexec / git-core / git-pull: baris 11: git-sh-setup: Tidak ada file atau direktori seperti itu

Saya telah memeriksa direktori git-core yang direferensikan dan git-sh-setup.sh ada di sana.

Perintah git lainnya bekerja persis seperti yang diharapkan

megafon
sumber
3
Saya mengalami masalah ini juga, kecuali dengan git stash. Saya akan memberi tahu Anda jika saya menemukan solusi
cadlac
Hanya mengalami masalah ini dengan zsh ... git sepertinya berfungsi dengan baik saat dijalankan dari bash. Zsh terkait?
zeekay
12
Ini adalah bug di iTerm2 dengan zsh. iTerm2 memperbaikinya dalam rilis terbaru (v1.0.0.20140629)
rds

Jawaban:

100

Saya pikir solusi terbersih untuk ini untuk saat ini adalah mengubah perintah awal dalam sesi iTerm Anda menjadi

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

Ini memperbaiki masalah saya.

Poin data lebih lanjut untuk analisis masalah: Tampaknya di 10.10, beberapa salinan dari variabel lingkungan PATH ada dan subkulit tampaknya lebih memilih salinan kedua.

Anda dapat mereproduksi ini dengan meluncurkan aplikasi kakao apa pun di konsol yang diluncurkan oleh iTerm. Anda akan mendapatkan peringatan yang terlihat seperti ini:

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

Saya percaya ini menjadi masalah di 10.10 dan bukan iTerm, tetapi sesuatu yang dilakukan iTerm menyebabkannya memanifestasikan dirinya (ini tidak terjadi di Terminal.app)

Pembaruan : Hal ini disebabkan oleh iTerm melakukan hal-hal yang "menarik" terhadap lingkungan. Perbarui ke rilis resmi iTerm 2.0 untuk mengatasi masalah ini.

pilif
sumber
6
Ini harus menjadi jawaban yang benar, perbaikan luar biasa. Namun, saya menetapkan perintah ke /usr/bin/login -f $USER, supaya saya dapat memiliki profil yang sama di banyak akun :)
cadlac
12
Rupanya, bash menghapus semua variabel lingkungan yang digandakan. Jadi, jika Anda menyetel perintah ke /bin/bash -c /bin/zshitu akan mempertahankan variabel lingkungan lain, misalnya $SSH_AUTH_SOCK.
Cypheon
2
Ini memperbaiki masalah saya dengan cara terbersih sejauh ini. Terima kasih banyak!
megafon
2
Ini memperbaiki git. Tetapi setiap kali saya perlu menggunakan ssh dengan id_rsa.pub saya, saya diminta memasukkan frasa sandinya. Saya tidak perlu melakukan ini sebelum mengubah perintah awal, atau di Terminal.app. Ada ide?
ZeR0
5
Saya pikir /bin/bash -c /bin/zshlebih baik daripada /usr/bin/login -f <your user name>, karena menyimpan pengkodean karakter. /usr/bin/login -f <your user name>kehilangan encoding saya dan saya tidak dapat menampilkan file saya seperti biasa.
Alpha Liu
35

Saya yakin ini adalah bug di iTerm saat menggunakan zsh. Mereka sengaja tidak memanggil / usr / bin / login, dan mereka tidak menggunakan execle untuk menghapus variabel lingkungan seperti seharusnya.

Jeremy Huddleston Sequoia
sumber
1
Wow, saya pikir Anda benar. Saya telah menghabiskan berjam-jam mencoba untuk mendapatkan berbagai perbaikan Git untuk bekerja, dan ternyata beralih dari iTerm2 w / zsh ke Terminal default Yosemite (masih dengan zsh) berfungsi dengan baik. Bagaimana Anda menemukan ini?
jbnunn
8
Nah, ini adalah kelompok orang paling spesifik yang pernah ... Kasus yang luar biasa.
Drew
2
itu adalah analisis yang sangat bagus. Jadi solusi yang baik adalah dengan mengatur perintah awal di iTerm ke / usr / bin / login -f <nama pengguna Anda>.
pilif
13
Solusi lain adalah mengatur perintah shell login di iTerm ke/bin/bash -c /bin/zsh
Vince
1
Mengubah dari login shellmenjadi commanddi bagian Preferensi> Profil> Umum, dan menggunakan /bin/bash -c /bin/zahseperti yang disarankan @Sorenly, perbaiki ini!
jlmakes
20

Mengunduh versi terbaru iTerm2 memperbaiki ini untuk saya!

Marthyn Olthof
sumber
1
Jika Anda ingin menyelesaikannya tanpa membuktikan bahwa Anda adalah seorang teknisi ..., lakukan saja. Terima kasih kepada Marthyn ...
Krishnaprasad Varma
Seperti yang dikatakan komentar di bawah, tampaknya iTerm dan zsh bersama-sama mencegah git menarik bekerja. Pergi ke iTerm2 memperbaikinya.
MikeHoss
4
Untuk memperjelas @MikeHoss, iTerm2 versi 1.0.x tidak berfungsi, tetapi iTerm2 versi 2.0.x berfungsi. Keduanya adalah iTerm2, tetapi versinya adalah yang terpenting.
Kevin Cooper
16

Solusi lain, modifikasi iTerm2 Anda

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

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

chmod +x iTerm

Selesai.

Nikmati iTerm2 Anda dengan Yosemite!

Feng
sumber
iTerm2 adalah masalahnya dan ini adalah salah satu solusi terbaik untuk masalah tersebut. Pujian.
ocodo
Saya mengalami masalah ini bahkan pada rilis publik 10.10, dan ini memperbaikinya. Terima kasih Feng!
Ash Furrow
13

Sebagai solusi temp, saya memodifikasi garis git-pull 11, 12, dan 336 menjadi:

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

Ini memperbaiki git-pull untuk saat ini, tetapi saya yakin ada solusi yang lebih baik.

Ubiquill
sumber
2
Saya juga harus mengganti seperti 231 menjadi. /usr/local/Cellar/git/2.0.0/libexec/git-core/git-parse-remote
Keith Smiley
2
Jika saya perlu mengubah ini, saya mengatur milik saya untuk $GIT_PATH/git-sh-setup
ditunjuk
1
Saya mendapatkan /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?Setelah menerapkan perbaikan ini, ada yang tahu apa yang harus dilakukan?
Drew
@Andrew Ini jelek tapi saya harus melalui git-sh-setup dan mengganti semua gitdengan /usr/local/bin/git. Ada beberapa contoh gitdi git-pull juga yang harus diganti
jbnunn
3

Berikut ini adalah perbaikan sementara (dengan asumsi Homebrew dan Git 2.0.0) jika Anda membutuhkan Git untuk bekerja sebelum perbaikan resmi keluar. Saya menyiapkan dua variabel 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"

... dan kemudian mengganti contoh gitdengan tautan absolut yang sesuai. Anda dapat menggunakan Inti berikut untuk melakukan hal yang sama:

  • Ganti /usr/local/Cellar/git/2.0.0/libexec/git-core/git-sh-setup/ dengan git-sh-setup
  • Ganti /usr/local/Cellar/git/2.0.0/libexec/git-core/git-stash/ dengan git-stash
  • Ganti /usr/local/Cellar/git/2.0.0/libexec/git-core/git-pull/ dengan git-pull

Ini pasti peretasan, tetapi itu akan membuat Anda pergi.

EDIT: Pastikan Anda melihat jawaban dari @pilif sebelum melakukan ini ...

jbnunn
sumber
1

Solusi Ubiquill berlaku untuk git rebase (dan mungkin fungsi lain yang tidak berfungsi) juga. Dalam hal ini, baris 47 dan 48 harus diganti dengan yang berikut *:

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

* Path ini mengasumsikan bahwa Anda telah menginstal git dengan homebrew, dan itu tinggal di dalam /usr/local/Cellar/git/2.0.0/.

ferchak
sumber
1

Edit file git-pull Anda dan tambahkan baris ini di atasnya (tepat setelah blok komentar)

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

Atau cukup salin tempel ini di terminal Anda:

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

Pembaruan: Seperti yang diduga oleh pilif , sejak pembaruan iTerm2 terakhir (1.0.0.20140629), git-pullberjalan dengan baik tanpa PATHpenggantian ini .

pyrou
sumber
Ini tampaknya menjadi satu-satunya solusi untuk selangkah lebih maju dalam konfigurasi saya. Setelah menambahkan baris PATH, saya mendapatkan kesalahan ini ketika saya mencoba PULL: git: 'credential-osxkeychain' bukan perintah git. Lihat 'git --help'. Ada ide?
kiks73
0

UPDATE: masih tidak berfungsi dengan rilis yang disebutkan di bawah ini, kesalahan saya. Git push bekerja Git pull tidak.

Tampaknya masalah ini telah diperbaiki oleh Apple dengan Mac OS X Yosemite 10.10 ( 14A329r ). saya menggunakan saluran Beta Yosemite umum (bukan pengembang). Git push /Tarik berfungsi seperti yang diharapkan lagi tanpa modifikasi apa pun.

Frank Lämmer
sumber
Tidak, saya mengalami variabel lingkungan duplikat pada 14A329r, jadi belum diperbaiki pada build itu.
Zr40
@ Zr40 th. kamu benar. bagaimana Git push bekerja sekarang? bagi saya, tapi Git pull masih TIDAK berfungsi.
Frank Lämmer