Git 当我基于提交消息提交时,如何提升package.json版本?

Git 当我基于提交消息提交时,如何提升package.json版本?,git,typescript,gulp,githooks,husky,Git,Typescript,Gulp,Githooks,Husky,当我提交时,我正在尝试切换package.json文件的版本,但前提是提交消息的前缀正确:MJprefix触发补丁切换,^prefix触发小切换。我编写了一个gulp任务来完成这项工作,它可以工作,唯一的问题是我无法获取当前提交的消息,执行任务,然后将package.json添加到提交并继续 我尝试在这两个git挂钩上运行我的任务: 预提交 问题: 我只能访问这个钩子中以前的提交消息,而不是我们现在正在做的那个 什么有效 我可以修改版本,但只能基于以前的提交消息 我可以启动package.

当我提交时,我正在尝试切换package.json文件的版本,但前提是提交消息的前缀正确:
MJ
prefix触发补丁切换,
^
prefix触发小切换。我编写了一个gulp任务来完成这项工作,它可以工作,唯一的问题是我无法获取当前提交的消息,执行任务,然后将package.json添加到提交并继续

我尝试在这两个git挂钩上运行我的任务:

预提交
问题:

  • 我只能访问这个钩子中以前的提交消息,而不是我们现在正在做的那个
什么有效

  • 我可以修改版本,但只能基于以前的提交消息
  • 我可以启动package.json
  • 然后,可以将package.json与其他文件一起添加到提交中
准备提交消息
问题:

  • staging package.json不会将其添加到提交中
什么有效

  • 我可以根据当前的提交消息修改版本
  • 我可以启动package.json
这是我用两个钩子试过的吞咽任务。我消除了一些噪音,试图将其降至最低

import * as fs from "fs";
import gulp from "gulp";
import * as shell from "shelljs";
import pkg from "./package.json";

const getCommitMsg = () => fs.readFileSync(".git/COMMIT_EDITMSG", "utf8");
gulp.task(
    BUMP_VERSION.task,
        (done) => {

            const message = getCommitMsg();
            const isMinor = message.startsWith(MINOR_PREFIX);
            const isPatch = message.startsWith(PATCH_PREFIX);

            if (!isMinor && !isPatch) {
                done();
                return exit(EC.NOT_VERSION);
            }

            const newPatch = isPatch ? parseInt(patch) + 1 : 0;
            const newMinor = isMinor ? parseInt(minor) + 1 : minor;

            const newVersion = `${major}.${newMinor}.${newPatch}`;
            const newPkg = Object.assign({}, pkg, { version: newVersion }); // update version
            fs.writeFileSync("./package.json", JSON.stringify(newPkg, null, 4));

            shell.exec("git add ./package.json");

            done();
        },
);

几乎所有内容都依赖于提交消息,该消息是使用
getcommitsg
函数获取的。可能
fs.readFileSync(“.git/COMMIT_EDITMSG”,“utf8”)不是一条路吗?也许我可以运行另一个命令(使用
shelljs
)来获取
pre-commit
钩子中的当前提交消息?否则,如果我使用
prepare-commit-msg
钩子,那么我可以得到正确的消息,但是我如何将其与其他暂存文件一起添加到当前提交中?

您可以使用
commit-msg
钩子读取提交消息,并根据该钩子执行操作、暂存文件和提交

.git/hooks/commit msg

COMMIT_MSG_FILE=$1

node bump.js
git add package.json
git commit -m "`cat $COMMIT_MSG_FILE`" --no-verify
false
node bump.js
将增加package.json中的版本(类似于您的gulp任务)

git add package.json
将暂存修改后的文件

git commit-m”
cat$commit\u MSG\u FILE
“--没有验证
会提交暂存文件,但会跳过挂钩(预提交和提交消息)


false
将停止原始提交,因为我们已经在最后一行提交了

这并不能解决我的具体问题,但这是我遗漏一些信息的错误。你的回答基本上解决了这个问题!我只是忘了提一下,我还有一个post-commit钩子,它可以切换分支,cherry将提交选择到该分支中。但是你给了我一些工作!在回答之前,我还发现了一个非常慢的解决方案:将bump任务放到post-commit钩子中,然后仅对package.json进行提交。虽然不漂亮,但它完成了任务。无论如何,谢谢你的回答!我相信它会帮助有类似问题的人!:)对于任何对如何优雅地完成此处描述的操作感兴趣的人,您可以查看它非常类似,但是它不是停止原始提交来创建自己的,而是在提交后脚本中对其进行修改