我没有在这个功能中看到任何SmartGit配置。
我更愿意依靠prepare-commit-msg
钩子,如"如何向Git提交注释添加项目特定信息?"所述,基于commit.template
Git配置。
另请参见"将当前分支名称包含在提交模板中"的另一个示例。
这里有两个与您相关的钩子: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以来,支持commit message templates(SmartGit What's new)。不幸的是,这些模板是静态的。
如果您和我一样,希望根据分支名称预加载提交消息,则可以使用一个解决方法,在每次触发post-checkout
git 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
额外提示:
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"]
prepare-commit-msg
钩子被 SmartGit 忽略了,这真是令人失望。 - PerpetualStudent