为什么在我的 commit-msg 挂钩中将 `GIT_EDITOR` 设置为 `:`(冒号)?
Why is `GIT_EDITOR` set to `:` (colon) within my `commit-msg` hook?
我有一个 commit-msg
钩子试图读取 GIT_EDITOR
环境变量。
在我的shell中没有设置$GIT_EDITOR
$ echo $GIT_EDITOR
$ test -z "$GIT_EDITOR" && echo "GIT_EDITOR empty"
GIT_EDITOR empty
但是在 commit-msg
挂钩中它似乎设置为 :
。为什么是这样?有办法防止它发生吗?
我已经在多台机器上对此进行了测试,发现到处都是相同的行为。
减少测试用例:
$ mkdir /tmp/git-hook-editor-test && cd /tmp/git-hook-editor-test/
$ git init
$ echo 'echo "GIT_EDITOR =" $GIT_EDITOR && exit 1' > .git/hooks/commit-msg
$ touch foo.txt
$ git add foo.txt
$ git commit -m 'foo' foo.txt
GIT_EDITOR = :
答案在 documentation(靠近 "pre-commit" 描述的底部):
All the git commit
hooks are invoked with the environment variable GIT_EDITOR=:
if the command will not bring up an editor to modify the commit message.
如果您不使用 -m
,您应该会看到它变得更有意义。
我有一个 commit-msg
钩子试图读取 GIT_EDITOR
环境变量。
在我的shell中没有设置$GIT_EDITOR
$ echo $GIT_EDITOR
$ test -z "$GIT_EDITOR" && echo "GIT_EDITOR empty"
GIT_EDITOR empty
但是在 commit-msg
挂钩中它似乎设置为 :
。为什么是这样?有办法防止它发生吗?
我已经在多台机器上对此进行了测试,发现到处都是相同的行为。
减少测试用例:
$ mkdir /tmp/git-hook-editor-test && cd /tmp/git-hook-editor-test/
$ git init
$ echo 'echo "GIT_EDITOR =" $GIT_EDITOR && exit 1' > .git/hooks/commit-msg
$ touch foo.txt
$ git add foo.txt
$ git commit -m 'foo' foo.txt
GIT_EDITOR = :
答案在 documentation(靠近 "pre-commit" 描述的底部):
All the
git commit
hooks are invoked with the environment variableGIT_EDITOR=:
if the command will not bring up an editor to modify the commit message.
如果您不使用 -m
,您应该会看到它变得更有意义。