gpt4 book ai didi

node.js - 当我点击 github 中的 merge 请求按钮时,预 merge 提交钩子(Hook)是否会被执行?

转载 作者:太空宇宙 更新时间:2023-11-03 21:50:16 25 4
gpt4 key购买 nike

当我创建从发布分支到主控的 pull 请求时,我想自动更新包版本,之后我希望每当我 merge 它时,都会执行预 merge git Hook 来启动另一个脚本。

预 merge 提交:

cd my_app
node ./hooks/post-commit-version
RETVAL=$?

if [ $RETVAL -ne 0 ]
then
exit 1
fi

Hook /提交后版本:

#!/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 Hook 并手动执行 git 命令,它成功运行并按照我想要的方式更新 github 中的存储库。但我不确定当我单击 merge 请求按钮时,git hooks 是否在 Github 服务器中执行。

最佳答案

简短的回答是否定的。

Hook 绑定(bind)到一个特定存储库,并且不会通过 Git 操作进行传输。1您在存储库中设置的任何 Hook 都不会被传输。在其他存储库中设置。因此,您存储库中的 Hook 会在存储库中起作用,但如果您在其他地方有第二个克隆,则它不会在第二个克隆中起作用。

除此之外,GitHub 使用不同的机制(“GitHub Actions”),并且不允许您首先将任何 Hook 放入其存储库中。

<小时/>

1如果您的操作系统提供符号链接(symbolic link),您可以(手动,每个克隆一次)安装符号链接(symbolic link)作为 Git Hook ,该符号链接(symbolic link)指向存储库工作树中的文件。通过这种方式,您可以获得一个受各种操作影响的钩子(Hook):由于钩子(Hook)的实际可执行代码位于您的工作树中,因此影响工作树中该文件的事物也会影响该钩子(Hook)。

类似地,在不提供符号链接(symbolic link)的操作系统上,您可以(手动,每个克隆一次)安装一个钩子(Hook)脚本或二进制文件,该钩子(Hook)脚本或二进制文件通过在工作树外运行脚本或二进制文件来工作。也就是说,您不依赖操作系统的符号链接(symbolic link)机制直接从工作树运行文件,而是编写一个钩子(Hook),其“运行”操作包括“从工作树运行文件并使用其退出状态作为钩子(Hook)的退出”状态”。

关于node.js - 当我点击 github 中的 merge 请求按钮时,预 merge 提交钩子(Hook)是否会被执行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60510169/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com