当我根据提交消息提交时,如何才能提高 package.json 版本?
How can I bump the package.json version when I commit based on the commit message?
我试图在提交时提升我的 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
挂钩,那么我可以获得正确的消息,但是我如何将它与其他暂存文件一起添加到当前提交中?
您可以使用 commit-msg
钩子来读取提交消息,根据它采取行动,暂存文件并提交
.git/hooks/commit-msg
COMMIT_MSG_FILE=
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
将提交暂存文件但跳过挂钩(预提交和提交消息)
false
将停止原始提交,因为我们已经在最后一行提交了
我试图在提交时提升我的 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
挂钩,那么我可以获得正确的消息,但是我如何将它与其他暂存文件一起添加到当前提交中?
您可以使用 commit-msg
钩子来读取提交消息,根据它采取行动,暂存文件并提交
.git/hooks/commit-msg
COMMIT_MSG_FILE=
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
将提交暂存文件但跳过挂钩(预提交和提交消息)
false
将停止原始提交,因为我们已经在最后一行提交了