代码之家  ›  专栏  ›  技术社区  ›  glyn

当textmate退出时,mac上的git commit-a挂起

  •  2
  • glyn  · 技术社区  · 15 年前

    我把core.editor设置为“mate-w”。在Leopard上,git commit-a启动textmate。在输入提交日志消息、保存(cmd-s)和退出(cmd-q)textmate之后,Git将使用输入的提交日志消息成功完成提交操作。

    自从升级到雪豹(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_跟踪设置为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找不到commit日志消息,它将中止commit。这似乎是一个明显的问题,但它暗示Git提交和编辑器之间的交互是不完美的。)

    3 回复  |  直到 14 年前
        1
  •  1
  •   mipadi    15 年前

    我假设这与textmate关闭文件的方式有关,尽管我无法理解具体情况。 mate -w 标志表示“等待textmate关闭文件”(通常 伙伴 是让textmate打开文件,然后退出)。这允许将textmate用作 $EDITOR . 我想当textmate退出(通过textmate->退出)时,它会绕过一些机制,通过这些机制 伙伴 程序“等待”,但我不知道细节。你可能会有更多的运气联系 TextMate mailing list 而不是git邮件列表,因为这可能是一个文本伴侣的事情,而不是git的事情。

        2
  •  0
  •   glyn    15 年前

    根据A response 在textmate邮件列表中,这个问题的根源似乎是cocoa框架处理应用程序关闭的方式。

    Leopard和SnowLeopard之间的行为可能发生了变化,因此负责与“Mate”通信的对象不再被正确销毁,调用程序git commit挂起。

        3
  •  0
  •   psp    14 年前

    我已经为此挣扎了好几天,这让我发疯了。我刚刚找到了罪魁祸首,我将在这里记录下来,希望能减轻别人的痛苦。

    在某个时刻,我将我的~/.gitconfig~/.gitignore global移动到一个小的git存储库中,用于存储我的点文件,并将我的主目录中的符号链接到存储库中。此外,回购被存储在Dropbox磁盘上。(旁注:一般来说,把git repos放在Dropbox中是个坏主意——我可以根据个人经验证明——但这既不是这里也不是那里。)

    在任何情况下,通过筛选DTRUS输出试图找出我为什么不能再和textmate提交,我看到了这个,并将文件移回了我的主目录。正确的行为立即返回。

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