git commit -a на Mac зависает при выходе из TextMate - PullRequest
2 голосов
/ 18 ноября 2009

Я установил для core.editor значение "mate -w". На Leopard git commit -a запускает TextMate. После ввода сообщения журнала фиксации, сохранения (Cmd-S) и выхода (Cmd-Q) TextMate, git успешно завершит операцию фиксации с использованием введенного сообщения журнала фиксации.

После обновления до Snow Leopard (Mac OS X 10.6.2) поведение изменилось. После выхода из TextMate git commit зависает (потребляет 0% ЦП) и должен быть отменен с помощью Ctrl-C.

То же самое происходит, если не настроен core-editor и для $ EDITOR установлено значение "mate" или "mate -w".

Обходной путь - закрыть только текущее окно TextMate, нажав Ctrl-W, а не Ctrl-Q после сохранения сообщения журнала фиксации, но я хотел бы понять разницу в поведении (особенно потому, что мои пальцы теперь обучены последовательность Cmd-S Cmd-Q) и получите исправление, так как многие другие могут столкнуться с этим.

IRC-канал #git (ссылка на домашнюю страницу git ) помог. Они заставили меня установить $ GIT_TRACE на 1, что показало следующую трассировку:

git commit -a
trace: built-in: git 'commit' '-a'
trace: run_command: 'sh' '-c' 'mate -w "$@"' 'mate -w' '.git/COMMIT_EDITMSG'
^C

(Кроме того, на другом Mac, на котором в прошлом работал Leopard, git commit продолжался после того, как я вышел из TextMate, но затем git не мог найти сообщение журнала коммитов и прервал коммит. Кажется, это отдельная проблема, но это намекает на то, что взаимодействие между git commit и редактором несовершенно.)

Ответы [ 3 ]

1 голос
/ 18 ноября 2009

Я предполагаю, что это как-то связано с тем, как TextMate закрывает файл, хотя я не могу понять специфику. Флаг mate -w означает «подождите, пока TextMate закроет файл» (обычное поведение mate заключается в том, чтобы TextMate открыл файл, а затем завершил работу). Это позволяет использовать TextMate как $EDITOR. Я полагаю, что при выходе из TextMate (через TextMate -> Quit) он обходит какой-то механизм, с помощью которого mate программа «ждет», но я не знаю деталей. Возможно, вам повезет больше, связавшись со списком рассылки TextMate , а не со списком рассылки Git, поскольку, вероятно, это вещь TextMate, а не Git.

0 голосов
/ 20 сентября 2010

Я боролся с этим в течение нескольких дней, и это сводило меня с ума. Я только сейчас нашел виновника, которого я здесь запишу в надежде облегчить чужие страдания.

В какой-то момент я переместил мой ~ / .gitconfig ~ / .gitignore-global в небольшой репозиторий git, который я использую для хранения своих файлов точек, и поместил ссылку из моего домашнего каталога в репозиторий. Кроме того, репо был сохранен на диске Dropbox. (Примечание: в общем, плохая идея хранить git-репозитории в DropBox - я могу засвидетельствовать из личного опыта - но это ни здесь, ни там.)

В любом случае, прибегнув к просеиванию через вывод dtruss, пытаясь выяснить, почему я больше не могу связываться с textmate, я увидел это и переместил файлы обратно в мой домашний каталог. Правильное поведение вернулось немедленно.

Боюсь, я не знаю, было ли это а) символьная ссылка б) Dropbox в) сочетание того, что сломало вещи, и, потратив на это столько времени, я должен вернуться к работе. Но это должно дать вам кое-что попробовать.

0 голосов
/ 24 ноября 2009

Согласно ответу в списке рассылки TextMate, вполне вероятно, что источником этой проблемы является то, как платформа Cocoa обрабатывает завершение работы приложения.

Вероятно, изменилось поведение между Leopard и Snow Leopard, так что объект, отвечающий за связь с 'mate', больше не уничтожается должным образом и вызывающий git commit зависает.

...