2009-11-18 14 views
2

我将core.editor设置为“mate -w”。在Leopard上,git commit -a启动TextMate。输入提交日志消息后,保存(Cmd-S)和退出(Cmd-Q)TextMate,git将使用输入的提交日志消息成功完成提交操作。当TextMate退出时,Mac上的git commit -a挂起

自升级到Snow Leopard(Mac OS X 10.6.2)后,行为发生了变化。退出TextMate之后,git commit会挂起(消耗0%的CPU)并需要使用Ctrl-C取消。

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

一种解决方法是按Ctrl-W,而不是按Ctrl-Q保存提交日志信息后退出只是当前TextMate的窗口,但我想了解行为的差异(尤其是我的手指现在正在受训与Cmd-S Cmd-Q序列一起),并得到解决办法,因为许多其他人可能会遇到这种情况。

#git IRC频道(参考git home page)是一些帮助。他们让我设置$ GIT_TRACE为1,这显示出下面的跟踪:

git commit -a 
trace: built-in: git 'commit' '-a' 
trace: run_command: 'sh' '-c' 'mate -w "[email protected]"' 'mate -w' '.git/COMMIT_EDITMSG' 
^C 

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

回答

0

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

Leopard和Snow Leopard之间的行为可能会发生变化,因此负责与'mate'通信的对象不再被正确地破坏,并且调用者git commit会挂起。

1

我假设它与方式TextMate关闭文件,虽然我无法了解具体内容。 mate-w标志表示“等待TextMate关闭文件”(mate的常规行为是让TextMate打开文件,然后退出)。这使得TextMate可以用作$EDITOR。我猜想当TextMate退出时(通过TextMate - > Quit),它绕过某些机制,mate程序“等待”,但我不知道细节。你可能有更多的运气联系TextMate mailing list,而不是Git邮件列表,因为这可能是一个TextMate的东西,而不是Git的东西。

+0

谢谢。我已经发布到指出这个问题的TextMate邮件列表。 – 2009-11-18 16:18:42

+0

读者请注意:这个答案并没有真正回答这个问题,所以请随时添加一个完整的答案! – 2009-11-19 11:01:15

0

我一直在为此挣扎好几天,这让我变得疯狂。我刚才找到了我要在这里记录的罪魁祸首,希望能够缓解别人的痛苦。

在某些时候,我将我的〜/ .gitconfig〜/ .gitignore-global移动到一个小的git存储库中,用于存储我的点文件,并从我的主目录符号链接到存储库。此外,回购存储在Dropbox磁盘上。 (附注:通常在DropBox中保留git仓库的不好主意 - 我可以从个人经验中证明 - 但这不是在这里也不在那里)。

在任何情况下,不得已经通过筛选输出尝试找出原因我无法再与文本提交,我看到了这一点,并将文件移回到我的主目录。正确的行为立即返回。

恐怕我不知道它是否是a)符号链接b)Dropbox c)两者的组合破坏了事物,并浪费了很多时间,我必须重新开始工作。但是这应该给你一些尝试。