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

问题描述 投票:2回答:1

我在提交时试图阻止我的package.json文件的版本,但只有在提交消息正确的前缀时:MJ前缀触发补丁凹凸,^前缀触发次要凹凸。我写了一个gulp任务来做这个并且它工作,唯一的问题是我无法获取当前提交的消息,执行任务,然后将package.json添加到提交并继续。

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

pre-commit

问题:

  • 我只能在这个钩子中访问先前的提交消息,而不是我们现在正在做的那个。

什么有效

  • 我可以碰撞版本,但只能基于之前的提交消息
  • 我可以上传package.json
  • 然后可以将package.json与其余部分一起添加到提交中

prepare-commit-msg

问题:

  • staging package.json不会将其添加到提交中

什么有效

  • 我可以根据当前的提交消息来修改版本
  • 我可以上传package.json

这是我用两个钩子试过的gulp任务。我删除了一些噪音以尽量减少噪音。

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();
        },
);

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

git typescript gulp githooks husky
1个回答
0
投票

您可以使用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_MSG_FILE" --no-verify将提交暂存文件但跳过挂钩(pre-commit和commit-msg)

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

© www.soinside.com 2019 - 2024. All rights reserved.