我是GIT的新手.我几天前从GitHub链接下载了GIT for Windows.我正在使用命令行工具MinGW32.我对默认编辑器不满意,所以我一直在尝试设置我最喜欢的编辑器.
我按照这里的说明使用EditPad Pro作为我的编辑器.但我一直收到以下消息:
Aborting commit due to empty commit message.
EditPad Pro打开一个新实例.MinGW32正在等待,因为在关闭EditPad Pro之前我没有收到中止消息.当编辑器打开时,它会打开一个名为的空白文件COMMIT_EDITMSG.当我关闭编辑器时,文件将保存到repo的主目录中.
我在这个答案中找到了一个线索,特别是这句话:
[Vim]默认将文件保存到.git/COMMIT_EDITMSG
如果我在关闭编辑器之前执行另存为以将文件保存到.git目录,那么它可以正常工作.但是,有两个问题:
当前的配置设置为core.editor:
"'D:\Program Files\JGsoft\EditPadPro5\EditPad Pro.exe' //newinstance"
Run Code Online (Sandbox Code Playgroud)
我不确定$*说明书中提到的内容是什么,但我尝试使用和不使用它,以及使用和不使用单/双引号的各种变体.我也尝试在shell脚本中设置值.在最坏的情况下,它根本不起作用(例如,甚至不会打开编辑器),最多只会打开一个空白文件.
如何使用Git在.git目录中创建的文件打开我的编辑器?
编辑:无论我是否使用$*,我得到完全相同的结果,这个答案说它不需要.这个Git Pro页面在解释如何设置外部合并和差异工具时提到了它,但在解释core.editor配置设置时没有提到它.注意:我也试过了%*.
如果$*需要(并且缺少)变量,我认为EditPad Pro将打开一个空白的无标题文件而不是当前目录中的空白COMMIT_EDITMSG文件.问题似乎是路径.
编辑:我做了更多的实验.我的文件路径中有空格,我认为这可能会导致问题.我将我的repo克隆到一个新目录中,名称中没有空格并修复了我的配置变量.它没有解决问题.但我注意到另一个问题.在我的一些测试中,已加载到编辑器中的空白文件已命名$@.
有几个问题可能导致混淆和问题.
壳牌特殊变量
如果core.editor设置为编辑路径和文件名,那么$*变量是多余的,没有必要的.但是,如果将core.editor其设置为shell脚本,则$*必须将该变量传递给编辑器.
这是有效的:
$ git config --global core.editor "'D:/Path To/EditPadPro.exe' //newinstance"
Run Code Online (Sandbox Code Playgroud)
这也是有效的:
$ git config --global core.editor "'E:/Path To/editor.sh'"
Run Code Online (Sandbox Code Playgroud)
当editor.sh包含:
#!/bin/sh
"D:/Path To/EditPadPro.exe" //newinstance "$*"
Run Code Online (Sandbox Code Playgroud)文件名中的空格
带空格的文件名可能很痛苦.如果引用了路径/文件名,那么它通常不是问题.但是当core.editor你设定你的价值时
逃避这样的空间:
"E:/Path\ To/editor.sh"
Run Code Online (Sandbox Code Playgroud)
或者像这样引用两次:
"'E:/Path To/editor.sh'"
Run Code Online (Sandbox Code Playgroud)
如果没有额外的引号(或反斜杠转义),您将没有问题设置值,但它将在使用时失败,因为外引号不是值的一部分.
编辑:后期方法(引用两次)似乎更安全.有关详细说明,请参阅底部的编辑.
Windows路径分隔符
传递给编辑器的文件名可以是相对路径(即.git/COMMIT_EDITMSG)或绝对路径(即e:/ path to/.git/rebase-merge/git-rebase-todo),但在这两种情况下它使用正斜杠作为路径分隔符.Windows通常可以接受正斜杠作为路径分隔符,尤其是在引用路径时.也许较旧版本的EditPad Pro无法接受正斜杠与隐藏目录的组合.一点预处理可以解决这个问题.
注意:具有正斜杠和没有隐藏目录的硬编码路径似乎工作正常.具有隐藏目录和反斜杠的硬编码路径似乎工作正常.
我对shell脚本没有太多经验,但以下内容现在适用于我.
editor.sh文件包含:
#!/bin/sh
fullpath=`echo "$*" | tr '/' '\\\'`
"D:/Program Files/JGsoft/EditPadPro5/EditPadPro.exe" //newinstance "$fullpath"
Run Code Online (Sandbox Code Playgroud)
并且配置设置如下:
$ git config --global core.editor "'E:/Path To/editor.sh'"
Run Code Online (Sandbox Code Playgroud)
我的EditPad Pro 5.3.2副本现在打开时已经加载了正确的文件,无论git命令是什么启动编辑器.
编辑:我不得不改变的价值core.editor.我使用反斜杠来转义路径中的空格,这正确地打开了编辑器.然而,当一个Git命令传递一个fielname使用相对路径(以点开始)到我的shell脚本,价值$*为$ @而不是文件名,这引起了编辑器命名一个空白文件,打开$ @.我以为我测试了那个组合,但显然没有.使用引用两次方法可行.
| 归档时间: |
|
| 查看次数: |
9525 次 |
| 最近记录: |