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

90

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

мегафон
источник
3
У меня тоже есть эта проблема, за исключением git stash. Я дам вам знать, если найду решение
cadlac
Была только эта проблема с zsh ... git, похоже, работал нормально при запуске из bash. Zsh связаны?
zeekay
12
Это была ошибка в iTerm2 с zsh. iTerm2 исправил это в своем последнем выпуске (v1.0.0.20140629)
rds

Ответы:

100

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

пилиф
источник
6
Это должен быть правильный ответ, замечательное исправление. Однако я установил команду /usr/bin/login -f $USER, чтобы иметь один и тот же профиль для нескольких учетных записей :)
cadlac
12
По-видимому, bash удаляет все повторяющиеся переменные среды. Итак, если вы установите команду, /bin/bash -c /bin/zshона сохранит другие переменные среды, например $SSH_AUTH_SOCK.
cypheon 05
2
Это решило проблему для меня самым чистым способом. Большое спасибо!
мегафон
2
Это исправляет git. Но всякий раз, когда мне нужно использовать ssh с моим id_rsa.pub, меня просят ввести кодовую фразу. Мне не нужно было делать это ни перед изменением начальной команды, ни в Terminal.app. Любая идея?
ZeR0 07
5
Думаю /bin/bash -c /bin/zshлучше чем /usr/bin/login -f <your user name>, потому что сохраняет кодировку символов. /usr/bin/login -f <your user name>потерял свою кодировку, и я не могу нормально отображать свои файлы.
Alpha Liu
35

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

Джереми Хаддлстон Секвойя
источник
1
Вау, я думаю, ты прав. Я потратил часы, пытаясь заставить работать различные исправления Git, и оказалось, что переключение с iTerm2 w / zsh на терминал по умолчанию Yosemite (все еще с zsh) отлично работает. Как ты это нашел?
jbnunn 05
8
Что ж, это самая специфическая группа людей из когда-либо существовавших ... Какой крайний случай.
Дрю
2
это был очень хороший анализ. Так что хорошим обходным путем является установка начальной команды в iTerm на / usr / bin / login -f <ваше имя пользователя>.
pilif 05
13
Другой обходной путь - установить для команды оболочки входа в систему iTerm значение/bin/bash -c /bin/zsh
Винс
1
Изменение с login shellна commandв разделе «Настройки»> «Профиль»> «Общие» и использование /bin/bash -c /bin/zahв соответствии с предложением @Sorenly исправили это прямо сейчас!
jlmakes
20

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

Мартин Олтоф
источник
1
Если вы хотите решить эту проблему, не доказывая, что вы технарь ... просто сделайте это. Спасибо Мартин ...
Кришнапрасад Варма
Как сказано в комментариях ниже, похоже, что это iTerm и zsh вместе, что предотвращает работу git pulls. Переход на iTerm2 исправляет это.
MikeHoss
4
Чтобы прояснить @MikeHoss, iTerm2 версии 1.0.x не работает, но iTerm2 версии 2.0.x работает. Оба являются iTerm2, но важна версия.
Кевин Купер
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

Выполнено.

Наслаждайтесь своим iTerm2 с Йосемити!

Фэн
источник
iTerm2 - это проблема, и это одно из лучших решений проблемы. Престижность.
ocodo
У меня была эта проблема даже в общедоступной версии 10.10, и это исправило ее. Спасибо, Фэн!
Ash Furrow
13

В качестве временного решения я изменил строки 11, 12 и 336 git-pull следующим образом:

. /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, но я уверен, что есть лучшее решение.

Ubiquill
источник
2
Мне также пришлось сменить 231 на. /usr/local/Cellar/git/2.0.0/libexec/git-core/git-parse-remote
Keith Smiley
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/git. Было также несколько экземпляров gitв git-pull, которые пришлось заменить
jbnunn
3

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

jbnunn
источник
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

* Этот путь предполагает, что у вас установлен git с homebrew, и он находится внутри /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переопределения.

Pyrou
источник
Кажется, это единственное решение, сделавшее шаг вперед в моей конфигурации. После добавления строки PATH я получаю эту ошибку при попытке PULL: git: 'credential-osxkeychain' не является командой git. См. 'Git --help'. Любые идеи?
kiks73 05
0

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

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

Франк Леммер
источник
Нет, у меня дублирование переменных среды на 14A329r, поэтому в этой сборке это не исправлено.
Zr40 08
@ Zr40 thx. Ты прав. как-то Git push теперь работает? для меня, но Git pull по-прежнему НЕ работает.
Фрэнк Леммер