智能Git:自动插入提交信息

9
有没有一种方法可以使用钩子脚本(Bash)在Smartgit中自动插入提交消息? 如果用户提交更改,我想预加载提交消息字段。
3个回答

7

prepare-commit-msg 钩子被 SmartGit 忽略了,这真是令人失望。 - PerpetualStudent
@PerpetualStudent,所以https://smartgit.userecho.com/communities/1/topics/532-commit-support-for-prepare-commit-msg-hook-sg-8515仍然没有改变... - VonC
是的,看起来仍然没有办法准备动态提交模板,这太疯狂了。 - PerpetualStudent

3

这里有两个与您相关的钩子: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项目根目录到该文件的路径。


0

很遗憾,SmartGit不支持pre-commitgit hook。但是,自从SmartGit 18.2以来,支持commit message templatesSmartGit What's new)。不幸的是,这些模板是静态的。

如果您和我一样,希望根据分支名称预加载提交消息,则可以使用一个解决方法,在每次触发post-checkoutgit hook时动态生成静态提交消息模板。

它的工作原理如下:

首先,安装一个git post-checkout 钩子,根据分支名称编写提交消息模板。例如,如果您的功能分支名称为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提交模板。使用上面示例中的文件名,我们得到:

git config commit.template .git/.commit-template

额外提示:

  1. 可以通过使用全局git钩子路径(如此处所示)在所有存储库中使用相同的配置:
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"]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接