前言
而之前的所有git commit,Git Shell首先会阻塞打开UE,直到输入log完成后保存,然后commit成功。现在情况是打开Notepad++就直接返回这句话,我郁闷不已,当时是加 -m 选项完成。
今晚突然发现问题了所在,记录下。
发现过程
此时,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就不会阻塞,直接返回Empty Log信息,并commit失败。