git pullのOSX 10.10ヨセミテベータ:git-sh-setup:そのようなファイルやディレクトリはありません


90

OSX 10.10 Yosemite Betaにアップグレードした後、実行するgit pullと次のエラーが返されます。

/ライブラリ/ Developer / CommandLineTools / usr / libexec / git-core / git-pull:line 11:git-sh-setup:No such file or directory

参照されているgit-coreディレクトリを確認しましたが、git-sh-setup.shがあります。

他のgitコマンドは期待どおりに機能しています


3
を除いて、この問題も発生していgit stashます。解決策が見つかったらお知らせします
cadlac

この問題はzsh ... gitでのみ発生しましたが、bashから実行すると正常に動作するように見えました。Zsh関連?
zeekay

12
これは、zshを使用したiTerm2のバグでした。iTerm2は、その最新版(v1.0.0.20140629)でそれを固定
RDS

回答:


100

今のところ、これに対する最もクリーンな解決策は、iTermセッションの最初のコマンドを

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

これで問題が解決します。

問題を分析するためのさらなるデータポイント:10.10では、PATH環境変数の複数のコピーが存在し、サブシェルは2番目のコピーを優先するようです。

iTermによって起動されるようにコンソール上で任意のcocoaアプリケーションを起動することにより、これを再現できます。次のような警告が表示されます。

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

これはiTermではなく10.10の問題だと思いますが、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 2014年

2
これにより、これまでのところ最も問題のない方法で問題が解決しました。どうもありがとう!
メガホン2014

2
これはgitを修正します。しかし、id_rsa.pubでsshを使用する必要があるときはいつでも、パスフレーズの入力を求められました。最初のコマンドを変更する前や、Terminal.appでこれを行う必要はありませんでした。何か案が?
ZeR0 2014年

5
文字エンコーディングを保持するので、私/bin/bash -c /bin/zshはよりも優れていると思います/usr/bin/login -f <your user name>/usr/bin/login -f <your user name>エンコーディングが失われ、通常どおりファイルを表示できません。
Alpha Liu

35

これは、zshを使用する場合のiTermのバグだと思います。それらは意図的に/ usr / bin / loginを呼び出さず、エクセルクルを使用して、本来あるべきように環境変数をクリアしません。


1
うわー、あなたは正しいと思います。さまざまなGit修正を機能させるために何時間も費やしてきましたが、zsh付きのiTerm2からYosemiteのデフォルトターミナル(zshを使用)への切り替えがうまくいくことがわかりました。どうやってこれを見つけたの?
jbnunn 2014年

8
ええと、これはこれまでで最も具体的な人々のグループです...なんというエッジケース。
ドリュー

2
それは非常に良い分析でした。したがって、適切な回避策は、iTermの最初のコマンドを/ usr / bin / login -f <your user name>に設定することです。
ピリフ2014年

13
別の回避策は、iTermのログインシェルコマンドを/bin/bash -c /bin/zsh
Vince

1
[設定]> [プロファイル]> [全般]セクションでからlogin shellに変更command/bin/bash -c /bin/zah、@ Sorenly を使用するように提案しましたが、これを修正しました!
jlmakes 2014年

20

iTerm2の最新バージョンをダウンロードすると、これが修正されました!


1
あなたが技術者であることを証明せずにそれを解決したい場合は...これをしてください。Marthynのおかげで...
Varma

以下のコメントにあるように、git pullが機能しないのは、iTermとzshが一緒になっているようです。iTerm2にアクセスすると修正されます。
MikeHoss 2014年

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

できました。

YosemiteでiTerm2をお楽しみください!


iTerm2が問題であり、これは問題に対する最良の解決策の1つです。称賛。
ocodo 2014年

10.10の公開リリースでもこの問題が発生していましたが、修正されました。風水ありがとう!
Ash Furrow 2014年

13

一時的な解決策として、私はgit-pull行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
キース・スマイリー

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?この修正を適用した後、誰が何をすべきかを考えていますか?
ドリュー

@Andrewこれは醜いですが、私はgit-sh-setupを実行してすべてgitをに置き換える必要がありました/usr/local/bin/gitgitgit-pullでもいくつかのインスタンスがあり、これも置き換える必要がありました
jbnunn

3

公式の修正が出る前にGitを動作させる必要がある場合の一時的な修正(HomebrewとGit 2.0.0を想定)を以下に示します。2つのシェル変数を設定します。

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を適切な絶対リンクに置き換えます。以下の要点を使用して同じことを行うことができます。

  • /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でgitがインストールされており、/ 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行を追加した後、プルしようとするとこのエラーが発生します。git: 'credential-osxkeychain'はgitコマンドではありません。「git --help」を参照してください。何か案は?
kiks73 2014年


0

更新:下記のリリースではまだ機能しません、私の間違い。Gitプッシュは機能しますが、Gitプルは機能しません。

この問題はAppleがMac OS X Yosemite 10.10(14A329r)で修正したようです。私は一般的なベータヨセミテチャネル(開発者ではありません)に参加しています。Gitプッシュ/引く 変更を加えなくても、期待どおりに動作します。


いいえ、14A329rで環境変数が重複しているので、そのビルドでは修正されていません。
Zr40

@ Zr40 thx。あなたが正しいです。どういうわけかGitプッシュは今動作しますか?私にとっては、Gitプルはまだ機能していません。
フランクレマー2014
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.