OSX 10.10 yosemite beta на git pull: git-sh-setup: нет такого файла или каталога

После обновления до 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 работают точно так, как и ожидалось

10 ответов

Решение

Я думаю, что самое чистое решение для этого на данный момент состоит в том, чтобы изменить начальную команду в вашей сессии iTerm, чтобы

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

Это решает проблему для меня.

Еще одна точка данных для анализа проблемы: кажется, что в 10.10 существует несколько копий переменной среды PATH, и подоболочки, похоже, предпочитают вторую копию.

Вы можете воспроизвести это, запустив любое приложение какао на консоли, запущенное 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, чтобы устранить эту проблему.

Я считаю, что это ошибка в iTerm при использовании Zsh. Они намеренно не вызывают /usr/bin/login, и они не используют execle для очистки переменных среды, какими они должны быть.

Загрузка последней версии iTerm2 исправила это для меня!

Другое решение, измените ваш 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!

В качестве временного решения я изменил строки 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 на данный момент, но я уверен, что есть лучшее решение.

Вот временное исправление (при условии 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, прежде чем делать это...

Есть обновление для git-rebase.sh

https://github.com/git/git/pull/110/files

Отредактируйте ваш файл 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 переопределения.

Обходной путь 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

* Этот путь предполагает, что у вас установлен git с homebrew, и он находится внутри /usr/local/Cellar/git/2.0.0/.

ОБНОВЛЕНИЕ: все еще не работает с выпуском, упомянутым ниже, моя ошибка. Git push работает Git pull не работает.

Мне кажется, что проблема была исправлена ​​Apple с Mac OS X Yosemite 10.10 (14A329r). Я нахожусь на общем канале Beta Yosemite (не разработчик). Git push/вытащить работает как положено снова без каких-либо изменений.

Другие вопросы по тегам