gpt4 book ai didi

git - 始终跳过链接到自定义脚本的 npm 安装的预推送 Hook

转载 作者:太空狗 更新时间:2023-10-29 14:12:10 24 4
gpt4 key购买 nike

我想阻止所有开发人员执行 git push to master (--force excluded)。我不想让每个人都在 .git/hooks 文件夹中创建一个预推送文件,而是想使用 npm 自动化该过程并将所需的文件添加到远程 git 存储库。

我在 package.json 中添加了指向自定义脚本的“pre-push”,

"pre-push": {
"run": [
"prepushscript"
]
},

"scripts": {
"start": "node app.js",
"test": "node_modules/.bin/gulp test",
"prepushscript": "prepushscript"
},

"devDependencies": {
.
.
"pre-push": "^0.1.0",
.
.
}

注意:自定义脚本prepushscript与package.json同级文件。

prepushscript 文件相当简单

protected_branch='master'  
current_branch=$(git symbolic-ref HEAD | sed -e 's,.*/\(.*\),\1,')

if [ $protected_branch = $current_branch ]
then
echo "Error: You are attempting to push to a protected branch."
exit 1 # push will not execute
fi

自定义脚本之所以有效,是因为在 .git/hooks 文件夹中创建本地预推送文件并尝试推送到 protected 分支会导致看到脚本的回显错误消息。 Npm install 也在 .git/hooks 文件夹中创建符号链接(symbolic link)。一旦我准备好在本地主机上推送并运行 git push 的提交,推送就会通过,我得到以下信息,

pre-push:
pre-push: Failed to find the root of this git repository, cannot locate the `package.json`.
pre-push: Skipping the pre-push hook.
pre-push:
Everything up-to-date

我尝试用 package.json 中的简单 echo 语句替换 prepushscript 条目,看看脚本是否有问题,但我得到了相同的控制台日志。所做的其他尝试是向 prepushscript 文件添加扩展以查看它是否运行。

我无法弄清楚的主要问题是我找不到错误的来源以及它与 package.json 有什么关系。感谢您的帮助!

最佳答案

这条线失败了:

 this.root = this.exec(this.git, ['rev-parse', '--show-toplevel']);

https://github.com/dflourusso/pre-push/blob/master/index.js#L173

试图获取“顶级”目录的绝对路径。

this.git 包含 git 可执行文件的路径。使用 git GUI 时会出现问题,并且它使用自己的嵌入式可执行文件。我在使用 SourceTree 时遇到了这个问题并更改了我的首选项以便它使用系统可执行文件:

SourceTree > Preferences > Git > Use System Git (Git版本)

如果您使用的是不同的 GUI,请转到其首选项并确保它使用的是系统可执行文件。

关于git - 始终跳过链接到自定义脚本的 npm 安装的预推送 Hook ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34729063/

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