如何验证和显示git commit消息的错误?

时间:2016-06-08 09:58:58

标签: git github

我正在使用node.js项目,我需要使用各种应用程序,如github,sourcetree等..来检查git源代码。是否可以在git commit消息上自定义验证并在提交更改时在所有应用程序中显示错误消息?

我知道有一个git hook' commit-msg'可以使用git,但我不知道如何使用它。

2 个答案:

答案 0 :(得分:2)

这是一个样本。

#!/bin/sh

path=$1
echo path is $path

a=$(cat $path)
echo commit message is
echo $a
if [[ "$a" =~ "hello world" ]];then
  echo commit format test passed
  exit 0
else
  echo commit format test failed
  exit 1
fi

将其保存为名为commit-msg的文件,并使其可执行并将其放入.git / hooks /。

此示例检查提交消息是否具有“hello world”子字符串。如果是这样,提交将成功。如果没有,提交将失败。

这是一个python版本

#!/usr/bin/python

import sys

path = sys.argv[1]
print "path is " + path

with open(path) as f:
  lines = f.read()
  print "commit message is"
  print lines
  if "hello world" in lines:
    print "format test passed"
    exit(0)
  else:
    print "format test failed"
    exit(1)

你可以用你的逻辑改进这个钩子。您可以检查.git / hooks /是否有commit-msg.sample。如果是,您可以将其作为参考阅读。你可以cp .git/hooks/commit-msg.smaple .git/hooks/commit-msg然后编辑它。

此外,如果你想将这个钩子部署到每个repo中,你可以将这个钩子复制到/ usr / share / git-core / templates / hooks中,如果你使用的是Ubuntu。我不知道其他系统中的默认模板路径是什么。您可能需要检查。执行此操作后,当您git clone时,此挂钩将被复制到.git / hook /中。至于已经存在的回购,你可以运行git init来复制钩子。

还有一件事,如果你不想让钩子运行,你可以在--no-verify时添加选项-ngit commit,这也会绕过钩{{1}如果它存在。

答案 1 :(得分:2)

正如您在Nodejs项目中提到的那样,我假设您有一个package.json。我建议您查看ghooksvalidate-commit-msgcommitizenconventional-changelog

我意识到这里有很多链接,但所有这些链接here's an exampleAngularJS' commit convention之后一起工作:

  • package.json

    "devDependencies": {
      …
      "commitizen": "2.8.1",
      "cz-conventional-changelog": "1.1.6",
      "ghooks": "1.3.2",
      "validate-commit-msg": "2.6.1",
      …
    }
    
    …
    "config": {
      "ghooks": {
        "commit-msg": "validate-commit-msg"
      },
      "commitizen": {
        "path": "node_modules/cz-conventional-changelog"
      }
    }
    …