我想阻止所有开发人员能够进行git push to master(--force excluded)。我没有要求每个人在.git / hooks文件夹中创建预推送文件,而是希望使用npm自动执行该过程并将所需文件添加到远程git存储库。
我加入了" pre-push"在package.json中,它指向一个自定义脚本,
"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文件夹中创建本地预推送文件并尝试推送到受保护的分支导致可以看到脚本的echo错误消息。 Npm install也会在.git / hooks文件夹中创建符号链接。一旦我准备好在本地主服务器上运行并运行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有什么关系。谢谢你的帮助!
答案 0 :(得分:1)
我在" pre-push"中遇到了同样的错误npm包。看起来它并没有我的窗口git完整的空间路径,如" Program Files"。我不得不去找" git-pre-push"最后。