有没有办法使用钩子脚本在 Smartgit 中自动插入提交消息?(重击)。如果用户提交了他的更改,我想预加载提交消息字段。
3 回答
我没有看到此功能的任何SmartGit 配置。
我宁愿依靠“如何将项目特定信息添加到 Git 提交评论? ”中描述的prepare-commit-msg
挂钩,基于Git 配置。
另请参阅“在提交模板中包含当前分支名称”以获取另一个示例。commit.template
您可能会感兴趣 2 个钩子:prepare-commit-msg 和 commit-msg
prepare-commit-msg 可能更适合您的目的,因为它允许您在用户看到之前预先填写提交消息。不幸的是 Smartgit 不支持这个钩子。(见我的帖子和它所指的两个旧帖子)
commit-msg 还允许您修改提交消息,但在用户发送消息之后才会这样做。.git/hooks 目录中的示例钩子脚本应该可以为您编写自己的脚本提供一个良好的开端。
Git 钩子比模板更通用。模板更易于使用。如果您预加载的提交消息没有任何动态或需要 shell 脚本才能运行,则模板可能是更合适的路线。要使用模板,您必须在git-config中设置 commit.template 选项。要在 Smartgit 中进行设置,请转到“工具”>“打开 git shell”,然后键入
git config commit.template tmplfile
其中 tmplfile 是包含您的提交消息模板的文件,其中包括您的 git 项目根目录的路径。
不幸的是,SmartGit 不支持pre-commit
git hook。但是,从 SmartGit 18.2 开始,支持提交消息模板(SmartGit What's new)。遗憾的是,这些模板是静态的。
如果像我一样,您的目标是根据分支名称预加载提交消息,您可以使用一种解决方法,在每次触发post-checkout
git 挂钩时动态生成一个静态提交消息模板。
这是它的工作原理:
首先,安装一个post-checkout
基于分支名称编写提交消息模板的 git 钩子。例如,如果您的功能分支名称是ISSUE-123/feature/new-awesome-feature
,并且您希望提交消息以问题键为前缀ISSUE-123
,则可以使用以下脚本(我更喜欢 Python):
#!/usr/bin/env python3
import pygit2
GIT_COMMIT_TEMPLATE = ".git/.commit-template"
def main():
branch_name = pygit2.Repository('.').head.shorthand
issue_key = branch_name.split('/')[0]
with open(GIT_COMMIT_TEMPLATE, "w") as file:
file.write(f"{issue_key}: ")
if __name__ == "__main__":
main()
二、配置 git commit 模板。使用上面示例中的文件名,我们得到:
git config commit.template .git/.commit-template
奖励提示:
- 通过使用全局 git hooks 路径(如此处所示),可以在所有存储库中使用相同的配置:
git config --global core.hooksPath /path/to/my/centralized/hooks
并全局安装提交模板:
git config --global commit.template .git/.commit-template
- 在
post-checkout
脚本中,可以从 git 配置中提取 git 提交消息模板文件路径。例如:
pygit2.Repository(".").config["commit.template"]