Бета-версія OSX 10.10 yosemite на 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.
Повідомлю

Була лише ця проблема з 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

2
Це вирішило проблему для мене найчистішим способом до цього часу. Дуже дякую!
мегафон

2
Це виправляє git. Але щоразу, коли мені потрібно використовувати ssh з моїм id_rsa.pub, мене просили ввести парольну фразу. Мені не потрібно було робити це перед зміною початкової команди, ні в Terminal.app. Будь-яка ідея?
ZeR0

5
Я думаю, що /bin/bash -c /bin/zshце краще /usr/bin/login -f <your user name>, оскільки воно зберігає кодування символів. /usr/bin/login -f <your user name>втратив кодування, і я не можу відображати свої файли як зазвичай.
Альфа Лю

35

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


1
Ого, я думаю, ти маєш рацію. Я витрачав години, намагаючись змусити працювати різні виправлення Git, і виявляється, перехід з iTerm2 w / zsh на термінал за замовчуванням Йосеміті (все ще з zsh) чудово працює. Як ти це знайшов?
jbnunn

8
Ну, це найбільш конкретна група людей, що коли-небудь ... Який надзвичайний випадок.
Дрю

2
це був дуже хороший аналіз. Тож хорошим обхідним шляхом є встановлення початкової команди в iTerm на / usr / bin / login -f <ваше ім'я користувача>.
pilif

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, і це виправило. Дякую Фен!
Еш Борона

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/git. Було також кілька випадків gitgit-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відповідними абсолютними посиланнями. Ви можете скористатися наступними Гістами, щоб зробити те саме:

  • Замініть /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

* Цей шлях передбачає, що у вас 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заміни.


Це, здається, єдине рішення, щоб піти на крок вперед у моїй конфігурації. Після додавання рядка PATH, я отримую цю помилку при спробі PULL: git: 'credential-osxkeychain' не є командою git. Див. 'Git --help'. Будь-які ідеї?
kiks73


0

ОНОВЛЕННЯ: моя помилка все ще не працює з випуском, згаданим нижче. Git push працює Git pull не працює.

Мені здається, цю проблему вирішила компанія Apple з Mac OS X Yosemite 10.10 ( 14A329r ). я на загальному бета-каналі Йосеміті (не розробник). Git push /тягнути працює знову, як очікувалося, без будь-яких змін.


Ні, у мене виникають дубльовані змінні середовища на 14A329r, тому це не було виправлено на цій збірці.
Zr40

@ Zr40 thx. ти правий. якось зараз працює Git push? для мене, але Git pull все ще НЕ працює.
Frank Lämmer
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.