我正在开发一项更自动的 Git 提交功能。我们使用预提交钩子,该钩子的想法是请求任务 ID 和摘要,然后将它们写入提交模板。我们还希望打开模板时光标位于第三行。
预提交钩子执行后,模板打开,一切正常,只是光标不在第三行。我尝试了很多不同的方法来实现这一点,主要是使用 git config core.editor 命令和 GIT_EDITOR 变量。
在预提交挂钩中:
original_editor=$(git var GIT_EDITOR)
export GIT_EDITOR="nano +3"
在脚本退出之前调试行:
# Debugging line
echo "Original editor: $original_editor"
echo "Using core.editor: $(git config --global core.editor)" # Debugging line
echo "Using git_editor: $(git var GIT_EDITOR)" # Debugging line
终端输出:
Original editor: nano
Using core.editor: nano
Using git_editor: nano +3
但是,光标仍然位于提交消息模板中的第一行。
例如,如果我在执行预提交挂钩之前导出 GIT_EDITOR,那么它就会起作用,并且光标位于第三行。
预提交挂钩只是一个看门人:如果脚本以状态 0 退出,则提交发生,如果脚本以任何其他状态退出,则不会发生提交。这对于强制执行很多事情(例如“不要提交秘密”)很方便,但这也是预提交的全部作用。
正如 @phd 在评论中指出的(多次),钩子作为子进程执行,因此它们不会对 shell 环境产生任何持久影响。如果您想要执行您所描述的操作,则需要编写别名或 shell 脚本。