node.js - 当我单击 github 中的合并请求按钮时,是否会执行合并前提交挂钩?
问题描述
当我从发布分支创建一个拉取请求到 master 时,我想自动更新包版本,之后我希望每当我合并它时,都会执行 pre-merge git hook 以启动另一个脚本。
合并前提交:
cd my_app
node ./hooks/post-commit-version
RETVAL=$?
if [ $RETVAL -ne 0 ]
then
exit 1
fi
钩子/提交后版本:
#!/usr/bin/env node
const exec = require('child_process').exec;
const path = require('path');
const moment = require('moment');
const fs = require('fs');
function getBranch(){
return new Promise((resolve, reject) =>{
exec(
"git branch | grep '*'",
function (err, stdout, stderr) {
if(err)reject(err)
const name = stdout.replace('* ','').replace('\n','');
resolve(name)
}
)
});
}
getBranch()
.then((branch) => {
if(branch === 'release') {
const currentDate = moment().format('YY.MM.DD')
var pathToFile = path.join(__dirname, "../package.json");
if (fs.existsSync(pathToFile)) {
const data = fs.readFileSync(pathToFile, 'utf-8')
const content = JSON.parse(data);
content.version = currentDate;
fs.writeFileSync(pathToFile, JSON.stringify(content, null, 2), 'utf8');
exec(`git add ${pathToFile}`, (err, stdout, stderr) => {
if(err) console.log(err)
console.log(stdout)
})
} else {
console.log("Cannot find file : " + pathToFile);
return;
}
}
return;
})
.catch(error => {
console.log(error)
})
当我在本地尝试此操作时,使用pre-commit
钩子并手动执行 git 命令,它成功运行并将 github 中的存储库更新为我想要的存储库。但是当我单击合并请求按钮时,我不确定 git 钩子是否在 Github 服务器中执行。
解决方案
最简洁的答案是不。
Hooks 绑定到一个特定的存储库,并且不会通过 Git 操作传输。1您在存储库中设置 的任何挂钩都未在其他存储库中设置。因此,您在存储库中的钩子在您的存储库中起作用,但如果您在其他地方有第二个克隆,它不会在第二个克隆中起作用。
除此之外,GitHub 使用不同的机制(“GitHub Actions”),只是一开始就不允许您将任何钩子放入他们的存储库中。
1如果您的操作系统提供符号链接,您可以(手动,每个克隆一次)安装符号链接作为 Git 挂钩,符号链接指向存储库工作树中的文件。通过这种方式,您可以获得一个受各种操作影响的钩子:由于钩子的实际可执行代码存在于您的工作树中,因此影响工作树中该文件的事物会影响钩子。
同样,在不提供符号链接的操作系统上,您可以(手动,每个克隆一次)安装一个挂钩脚本或二进制文件,该脚本或二进制文件通过在工作树之外运行脚本或二进制文件来工作。也就是说,不是依靠操作系统的符号链接机制直接从工作树运行文件,而是编写一个钩子,其“运行”操作由“从工作树运行文件”组成,并将其退出状态用作钩子的退出地位”。
推荐阅读
- intellij-idea - JetBrains:根据每行的第一个字母按字母顺序对文件进行排序
- python - 如果内核中断则执行代码(Jupyter notebook 中的 Python)
- ios - Firebase 应用分发 - “等待开发者”消息
- google-cloud-dataflow - Apache Beam 批处理早期输出?
- javascript - 无法找到解决方案 - 以这种方式显示错误 - “尝试导入错误:'date-fns' 不包含默认导出(导入为 'dateFns')。”
- python-3.x - APScheduler 同时添加大量作业(数据库 Jobstore)
- angular - Firebase rest api 补丁请求
- copy-paste - 如何在 Tmux 中模拟类似 Emacs 的寄存器?
- excel - Excel - 自动工作表切换循环**仅限特定工作表**
- r - Quantmod getDividends 的解决方法,显然已于 2020 年 1 月 16 日停止工作