git提交-当TextMate退出时,Mac上的a将挂起

git提交-当TextMate退出时,Mac上的a将挂起,git,macos,textmate,Git,Macos,Textmate,我将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提交挂起(消耗0%的CPU),需要使用Ctrl-C取消 如果未设置核心编辑器并且$editor设置为“mate”或“mate-w”,则会

我将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提交挂起(消耗0%的CPU),需要使用Ctrl-C取消

如果未设置核心编辑器并且$editor设置为“mate”或“mate-w”,则会发生同样的情况

一种解决方法是在保存提交日志消息后,通过按Ctrl-W而不是Ctrl-Q来退出当前的TextMate窗口,但我想了解行为上的差异(特别是因为我的手指现在接受了Cmd-S Cmd-Q序列的训练),并得到修复,因为许多其他人可能会遇到这种情况

#git IRC频道(在上引用)提供了一些帮助。他们让我将$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

(另外,过去在另一台运行Leopard的Mac上,git commit在我退出TextMate后会继续,但是git找不到提交日志消息,它会中止提交。这似乎是一个明显的问题,但它暗示git commit和编辑器之间的交互不完美。)

我认为这与TextMate关闭文件的方式有关,尽管我无法理解具体细节
mate
-w
标志表示“等待TextMate关闭文件”(
mate
的通常行为是让TextMate打开文件,然后退出)。这允许TextMate用作
$编辑器
。我想当TextMate退出时(通过TextMate->Quit),它绕过了
mate
程序“等待”的某种机制,但我不知道细节。您可能更幸运地联系了,而不是Git邮件列表,因为这可能是TextMate的事情,而不是Git的事情。

根据TextMate邮件列表上的一个例子,这个问题的根源似乎是Cocoa框架处理应用程序关闭的方式


Leopard和Snow Leopard之间的行为可能发生了变化,因此负责与“mate”通信的对象不再被正确破坏,调用方git commit挂起。

我已经为此挣扎了好几天,这让我简直疯了。我刚刚找到了罪犯,我将在这里记录下来,希望减轻其他人的痛苦

在某个时候,我将我的~/.gitconfig~/.gitignore global移动到一个小的git存储库中,我用它来存储我的点文件,并将我的主目录符号链接到存储库中。此外,回购协议存储在Dropbox磁盘上。(旁注:一般来说,把git回购放在DropBox中是个坏主意——我可以从个人经验中证明这一点——但事实并非如此。)

在任何情况下,在通过筛选dtruss输出试图找出我无法再使用textmate提交的原因后,我看到了这一点,并将文件移回了我的主目录。正确的行为立即恢复


恐怕我不知道这是否是a)符号链接b)Dropbox c)两者的结合导致了事情的破裂,在浪费了这么多时间之后,我必须回去工作。但这应该给你一些尝试的机会。

谢谢。我已经在TextMate邮件列表中指出了这个问题。读者请注意:这个答案并没有真正回答这个问题,所以请随意添加完整的答案!