Git çekme üzerinde OSX 10.10 yosemite beta: git-sh-setup: Böyle bir dosya veya dizin yok


90

OSX 10.10 Yosemite Beta'ya yükselttikten sonra, çalıştırma git pullaşağıdaki hatayı döndürüyor:

/ Library / Developer / CommandLineTools / usr / libexec / git-core / git-pull: satır 11: git-sh-setup: Böyle bir dosya veya dizin yok

Başvurulan git-core dizinini kontrol ettim ve git-sh-setup.sh orada.

Diğer git komutları tam olarak beklendiği gibi çalışıyor


3
Ben de bu sorunu yaşıyorum, hariç git stash. Bir çözüm
bulursam

Bu sorunu sadece zsh ile yaşıyordu ... git, bash'dan çalıştırıldığında iyi çalışıyor gibi görünüyordu. Zsh ile ilgili mi?
zeekay

12
Bu, zsh ile iTerm2'de bir hataydı. iTerm2 en son sürümünde (v1.0.0.20140629) düzeltti
rds

Yanıtlar:


100

Sanırım bunun için şimdilik en temiz çözüm iTerm oturumunuzdaki ilk komutu şu şekilde değiştirmektir:

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

Bu benim için sorunu çözüyor.

Sorunun analizi için başka bir veri noktası: Görünüşe göre 10.10'da PATH ortam değişkeninin birden çok kopyası var ve alt kabuklar ikinci kopyayı tercih ediyor gibi görünüyor.

İTerm tarafından başlatılan konsolda herhangi bir kakao uygulamasını başlatarak bunu yeniden üretebilirsiniz. Şuna benzer bir uyarı alacaksınız:

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

Bunun iTerm değil 10.10'da bir sorun olduğuna inanıyorum, ancak iTerm'in yaptığı bir şey kendisini göstermesine neden oluyor (bu, Terminal.app'de olmaz)

Güncelleme : Bunun nedeni iTerm'in ortama "ilginç" şeyler yapmasıdır. Bu sorunu ortadan kaldırmak için iTerm 2.0'ın resmi sürümüne güncelleyin.


6
Bu doğru cevap olmalı, harika bir düzeltme. Ancak, komutu /usr/bin/login -f $USERbirden fazla hesapta aynı profile sahip olabilmek için olarak
ayarladım

12
Görünüşe göre, bash tüm yinelenen ortam değişkenlerini kaldırıyor. Yani, eğer komutu /bin/bash -c /bin/zshona ayarlarsanız, diğer ortam değişkenlerini koruyacaktır, örn $SSH_AUTH_SOCK.
cypheon

2
Bu benim için sorunu şimdiye kadarki en temiz şekilde çözdü. Çok teşekkürler!
megafon

2
Bu, git'i düzeltir. Ancak id_rsa.pub ile ssh kullanmam gerektiğinde, parolayı girmem istendi. İlk komutu veya Terminal.app'yi değiştirmeden önce bunu yapmak zorunda değildim. Herhangi bir fikir?
ZeR0

5
Bence /bin/bash -c /bin/zshdaha iyi /usr/bin/login -f <your user name>çünkü karakter kodlamasını koruyor. /usr/bin/login -f <your user name>kodlamamı kaybettim ve dosyalarımı normal şekilde görüntüleyemiyorum.
Alpha Liu

35

Zsh kullanırken bunun iTerm'de bir hata olduğuna inanıyorum. Kasıtlı olarak / usr / bin / login'i çağırmazlar ve olması gerektiği gibi ortam değişkenlerini temizlemek için execle kullanmazlar.


1
Vay bence haklısın. Çalışmak için çeşitli Git düzeltmelerini almaya çalışmak için saatler harcadım ve iTerm2 w / zsh'dan Yosemite'in varsayılan Terminaline (hala zsh ile) geçiş harika çalışıyor. Bunu nasıl buldunuz?
jbnunn

8
Pekala, bu şimdiye kadarki en spesifik insan grubu ... Ne kadar uç bir durum.
Drew

2
bu çok iyi bir analizdi. Bu nedenle, iTerm'deki ilk komutu / usr / bin / login -f <kullanıcı adınız> olarak ayarlamak iyi bir çözümdür.
pilif

13
Başka bir geçici çözüm, iTerm'deki oturum açma kabuğu komutunu şu şekilde ayarlamaktır/bin/bash -c /bin/zsh
Vince

1
Dan değiştirilmesi login shelliçin commandTercihler> Profil> Genel bölümünde ve kullanma /bin/bash -c /bin/zah@Sorenly olarak, önerilen bu hakkın yukarı belirlemiştir!
jlmakes

20

İTerm2'nin en yeni sürümünü indirmek bunu benim için çözdü!


1
Teknisyen olduğunuzu kanıtlamadan çözmek istiyorsanız ..., sadece şunu yapın. Teşekkürler Marthyn ...
Krishnaprasad Varma

Aşağıdaki yorumların söylediği gibi, git çekmelerinin çalışmasını engelleyen iTerm ve zsh birlikte görünüyor. İTerm2'ye gitmek sorunu düzeltir.
MikeHoss

4
@MikeHoss'u açıklığa kavuşturmak gerekirse, iTerm2 sürüm 1.0.x çalışmıyor, ancak iTerm2 sürüm 2.0.x çalışıyor. Her ikisi de iTerm2'dir, ancak önemli olan sürümdür.
Kevin Cooper

16

Başka bir çözüm, iTerm2'nizi değiştirin

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

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

chmod +x iTerm

Bitti.

Yosemite ile iTerm2'nizin keyfini çıkarın!


iTerm2 problemdir ve bu problemin en iyi çözümleri arasındadır. Tebrikler.
ocodo

Halka açık 10.10 sürümünde bile bu sorunu yaşıyordum ve bu sorunu çözdü. Teşekkürler Feng!
Kül Karık

13

Geçici bir çözüm olarak git-pull satırlarını 11, 12 ve 336 olarak değiştirdim:

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

Bu şimdilik git-pull'ı düzeltir, ancak eminim daha iyi bir çözüm vardır.


2
Ayrıca 231 gibi değiştirmem . /usr/local/Cellar/git/2.0.0/libexec/git-core/git-parse-remote
Keith Smiley

2
Bunu değiştirmem $GIT_PATH/git-sh-setup
gerekirse

1
Anlıyorum /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?Bu düzeltmeyi uyguladıktan sonra, ne yapacağına dair bir fikri olan var mı?
Drew

@Andrew Bu çirkin ama git-sh-kurulumundan geçmek ve hepsini gitile değiştirmek zorunda kaldım /usr/local/bin/git. gitGit-
pull'da

3

Resmi bir düzeltme çıkmadan önce Git'in çalışması gerekiyorsa işte geçici bir düzeltme (Homebrew ve Git 2.0.0 varsayılırsa). İki kabuk değişkeni kurdum:

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"

... ve sonra örnekleri gituygun mutlak bağlantılarla değiştirildi. Aynısını yapmak için aşağıdaki Temelleri kullanabilirsiniz:

  • /Usr/local/Cellar/git/2.0.0/libexec/git-core/git-sh-setup/ değiştirin git-sh-setup ile
  • Değiştir /usr/local/Cellar/git/2.0.0/libexec/git-core/git-stash/ ile git-stash
  • /Usr/local/Cellar/git/2.0.0/libexec/git-core/git-pull/ yerine git-pull ile değiştirin

Bu kesinlikle bir hack, ama sizi harekete geçirecek.

DÜZENLEME: Bunu yapmadan önce @pilif'in cevabına baktığınızdan emin olun ...


1

Ubiquill'in geçici çözümü git rebase için de geçerlidir (ve muhtemelen diğer işlevlerden hangisi çalışmazsa). Bu durumda, 47 ve 48. satırların aşağıdaki * ile değiştirilmesini gerektirir:

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

* Bu yol, git'in homebrew ile kurulduğunu varsayar ve /usr/local/Cellar/git/2.0.0/ içinde yaşar.


1

Git-pull dosyanızı düzenleyin ve bu satırı üstüne ekleyin (yorum bloğunun hemen sonrasına)

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

Veya bunu terminalinize kopyalayıp yapıştırın:

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

Güncelleme: Pilif tarafından tahmin edildiği gibi , son iTerm2 güncellemesinden (1.0.0.20140629) bu yana, git-pullbu PATHgeçersiz kılma olmadan düzgün şekilde çalıştırın .


Yapılandırmamda bir adım ileri gitmek için tek çözüm bu gibi görünüyor. PATH satırını ekledikten sonra, PULL: git: 'credential-osxkeychain' bir git komutu değil, bu hatayı alıyorum. "Git --help" bölümüne bakın. Herhangi bir fikir?
kiks73


0

GÜNCELLEME: aşağıda belirtilen sürümle hala çalışmıyor, benim hatam. Git push çalışır Git çekmez.

Bana öyle geliyor ki, sorun Apple tarafından Mac OS X Yosemite 10.10 ( 14A329r ) ile . genel Beta Yosemite kanalındayım (geliştirici değil). Git itme /Çek herhangi bir değişiklik yapılmadan tekrar beklendiği gibi çalışır.


Hayır, 14A329r'de yinelenen ortam değişkenleriyle karşılaşıyorum, bu nedenle bu derlemede düzeltilmedi.
Zr40

@ Zr40 thx. Haklısın. bir şekilde Git push şimdi çalışıyor mu? benim için ama Git çekme hala çalışmıyor.
Frank Lämmer
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.