Magit 是 Emacs 的 git 前端,想对于在 Emacs 当中写完代码再切换到终端去 commit 代码,或者去做一些 diff 之类的操作,把一切都放在 Emacs 当中比较方面一些。而且想对于命令行来说,这种方式也更加直观。
想对于集中式的代码管理外,我感觉对于个人来说,分布式的代码管理更加灵活一些。我目前用 git 的功能也不多,很多高级功能我也还没有掌握。我主要是把 git 用来记录 log 更多一些,有时候建几个分支罢了。我目前主要的编码活动是用 Java 来写面向对象课程的作业,作业本身不算难,但弄出来的代码很多。几部分不能一下子就完成,所以我会完成了一部分之后就 commit 一下。我这学期的面向对象作业都是这么做的,从第一次就开始,感觉一直很好。
有一天我发现 Magit 突然不能 commit 了。每当我写完 commit log 之后,按下 C-c C-c 之后,就没有任何反应了。后台可以看到 git 进程,但 CPU 使用率是 0.0%,也只能手动杀死。杀死之后运行一下 git status 看看,根本没有任何提交,这就让人非常苦恼了。我目前使用 Magit 的感觉来说,其中最爽的一步就是提交了。写好了 log 之后看到之前的工作都进入了 repo 的那一刻,成就感是无与伦比的。这下子不能 commit 了,就让这种快感打了折扣了。
这个问题发生在我写第一次和第二次作业之间,当中我也没注意到发生了什么,突然就发生了这种问题。结果做第二次作业的时候感觉就不如第一次作业时那么顺了。不过那段时间比较紧张,我也没有去找到底是哪里出了问题。我印象里好像是把 Magit 从 0.7 升级到了 0.8 才有了这个问题。于是就尝试重装了几遍,但问题是依旧。我觉得这应该是一个 bug,于是就耐心等待看看下一个版本。
今天看到了 Magit 0.8.1 发布的消息,正好看到 Homebrew 里面也有了 Magit 的 formula,就安装了。安装好后我发现还是有这个问题,就去 issues 去看了一下,发现已经有人报告了同样的 bug report。底下有人回复说是 Emacs trunk 的问题,不过我印象里没有记得那阵子编译安装过最新版 Emacs。
第二条回复里说:“Setting ‘magit-process-connection-type’ to nil resolves this for me.”,我于是就试了一下,在 .emacs 文件里面加了这么一行:
(set 'magit-process-connection-type nil)
再在 Magit 里面运行了一下 commit,发现久违的 commit 又回来了。