Node.js 提交时如何获取git提交消息?

Node.js 提交时如何获取git提交消息?,node.js,git,npm,husky,Node.js,Git,Npm,Husky,提交时如何获取git提交消息?我用哈士奇 我已经尝试在准备提交消息时获取提交消息 pacakgejson { ... "version": "0.1.0", "private": true, ... "husky": { "hooks": { "pre-commit": "lint-staged", "prepare-commit-msg": "cd ../tweet-git && node index.js" }

提交时如何获取git提交消息?我用哈士奇

我已经尝试在准备提交消息时获取提交消息

pacakgejson

{
  ...
  "version": "0.1.0",
  "private": true,
  ...
  "husky": {
    "hooks": {
      "pre-commit": "lint-staged",
      "prepare-commit-msg": "cd ../tweet-git && node index.js"
    }
  },
  ...
}
tweet git/index.js

require('child_process').exec('git rev-list --format=%s --max-count=1 HEAD', function(err, stdout) {
    const stdoutArray = stdout.split('\n')
    let commitMessage = `【tweet-git】\nプロジェクト: 「project」にcommitしました\n`
    commitMessage += stdoutArray[1]
    console.log('commitMessage', commitMessage);
});

stdout将是未定义的。请帮帮我,谢谢

你的思路是对的,但这里有几件事似乎不对劲

  • 您的命令(
    git rev list--format=%s--max count=1 HEAD
    )将从上次提交中获取消息,而不是当前正在进行的提交。如果您正在进行第一次提交,那么这将是
    未定义的
    ,如果您的最终目标是使用当前提交消息,那么这可能不是您想要使用的

  • 为了读取当前提交消息,您不能使用
    git rev list
    git log
    ,也不能使用任何读回之前提交的内容。看看Husky,它看起来也不会将消息作为参数传递,大多数人建议通过Husky的set
    环境变量
    获取存储消息的文件路径,然后使用FS读取它(链接:,)

  • 根据以上观察,这里有一个更新的
    tweet git/index.js
    ,应该使用当前提交消息:

    const fs=require('fs');
    const path=require('path');
    //调整它以匹配git回购的根,
    //下面的代码假设git root是`/tweet git之上的一个dir`
    常量gitRootDir=uu dirname+'/../';
    const messageFile=path.normalize(gitRootDir+'/'+process.env.HUSKY_GIT_PARAMS.split('')[0]);
    让commitMessage=`【推特git】\nプロジェクト: 「计划」に犯罪しました\n`
    commitMessage+=fs.readFileSync(messageFile,{encoding:'utf-8'});
    log('commitMessage',commitMessage);
    
    请注意关于需要调整gitRootDir的警告;Husky提供的路径是相对于git初始化文件夹的根目录的,而不是绝对路径,因此您当前的设置需要进行一些调整。这就是为什么大多数人将
    package.json
    放在项目根级别,然后在脚本中,不要使用
    cd脚本和&node my git hook.js
    ,他们只使用
    node脚本/my git hook.js


    它正在工作。我能听懂留言。谢谢你的资料。