我将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%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 "$@"' 'mate -w' '.git/COMMIT_EDITMSG'
^C
(另外,在过去运行Leopard的另一台Mac上,git commit在我退出TextMate后仍然继续,但是git找不到提交日志消息,它会中止提交。这似乎是一个明显的问题,但它暗示git commit和编辑器之间的交互是不完美的。)
答案 0 :(得分:1)
我认为它与TextMate关闭文件的方式有关,尽管我无法理解具体细节。 mate
的{{1}}标志表示“等待TextMate关闭文件”(-w
的通常行为是让TextMate打开文件,然后退出)。这允许TextMate用作mate
。我想当TextMate退出时(通过TextMate - >退出)它会绕过$EDITOR
程序“等待”的某种机制,但我不知道细节。你可能有更多的运气联系TextMate mailing list,而不是Git邮件列表,因为这可能是一个TextMate的东西,而不是Git的东西。
答案 1 :(得分:0)
根据TextMate邮件列表中的response,这个问题的根源似乎是Cocoa框架处理应用程序关闭的方式。
Leopard和Snow Leopard之间的行为可能会发生变化,因此负责与'mate'通信的对象不再被正确破坏,并且调用者git commit会挂起。
答案 2 :(得分:0)
我这几天一直在苦苦挣扎,这让我疯狂疯狂。我刚才发现了我将在此记录的罪魁祸首,希望减轻别人的痛苦。
在某些时候,我将〜/ .gitconfig~ / .gitignore-global移动到一个小git存储库中,用于存储我的dotfiles,并从我的主目录符号链接到存储库。此外,repo存储在Dropbox磁盘上。 (附注:一般来说糟糕的想法是在DropBox中保留git回购 - 我可以从个人经验中证明 - 但这既不在这里也不在那里。)
在任何情况下,我都试图通过dtruss输出进行筛选,试图找出为什么我不能再使用textmate了,我看到了这个并将文件移回了我的主目录。正确的行为立即返回。
我恐怕我不知道是否a)符号化b)Dropbox c)两者的组合破坏了东西,浪费了这么多时间,我必须回去工作。但那应该给你一些尝试。