色破飞机 发表于 2015-10-26 10:46:34

解决Windows下Git Shell编辑器问题

前言

最近开始重新用Git Shell,因为中途编辑器从之前的UltraEdit换成了Notepad++,所以在用git commit命令提交时,出现了一个诡异的问题:
直接返回“Aborting commit due to empty commit message.” 如图示:  

  

  而之前的所有git commit,Git Shell首先会阻塞打开UE,直到输入log完成后保存,然后commit成功。现在情况是打开Notepad++就直接返回这句话,我郁闷不已,当时是加 -m 选项完成。
  今晚突然发现问题了所在,记录下。
  

发现过程

首先我Notepad++是没有打开的,然后今晚直接git commit提交,Git Shell居然阻塞住,并没有出现前面说的返回“empty commit message”情况,然后我输入log后保存,顺利commit。但是,当我再次进行commit时,又出现了上面的问题。。。
之后,我连续commit,冒出以下提示框:
  

  

  此时,Git Shell的画面:
  

  

  之后,我点否。。再把整个Notepad++给全关掉,再次git commit,又成功阻塞住,提交log后保存,顺利commit。

  

  

  Ok,根据提示框,想了下前后两次的差异,把整个问题发现的过程缕一下:

  (一):Notepad++(未开)---->第一次commit成功---->关掉保存的log文件,但Notepad++并未关闭---->第二次commit失败,log文件未关闭;
(二):Notepad++(打开) ,log文件未关闭---->第三次commit失败,出现提示框---->关掉整个Notepad++---->第四次commit成功;
(中间的差异就是Notepad++在commit时有没有被打开,如果没被打开,则commit成功,否则,返回“Aborting commit due to empty commit message.”,commit失败)

  

原因搜索
  (在网上搜索,发现了问题可能原因)


  git commit的工作原理:
  

[*]创建新的编辑器进程;
[*]将COMMIT_EDITMSG文件传递给这个进程并阻塞等待进程结束;
[*]读取 COMMIT_EDITMSG 文件。
  

  而我遇到的情况是,运行COMMIT_EDITMSG文件时并不一定会创建新的编辑器进程----比如上面已经在运行着的Notepad++(可以只关闭页面),这时Git Shell将会直接使用这个进程打开 COMMIT_EDITMSG 文件(新增一个页面),这样Git就不会阻塞,直接返回EmptyLog信息,并commit失败。

  

         版权声明:本文为博主原创文章,未经博主允许不得转载。
页: [1]
查看完整版本: 解决Windows下Git Shell编辑器问题