如果您已经在使用“pre-commit”之类的 Git Hooks,您基本上可以在“pre-commit”列表中添加一个脚本并编写一个执行您需要的脚本(代码如下)。
使用 git/grep 命令的组合,您可以检查暂存文件列表中的“package.json”和“package-lock.json”是否都存在(或者它们都不存在)。
脚本可以是:
#!/bin/sh
if [ `git diff --name-only --cached | egrep -c 'package.json|package.lock.json'` == "0" -o `git diff --name-only --cached | egrep -c 'package.json|package.lock.json'` == "2" ]; then
echo "Checked successfully."
elif [ `git diff --name-only --cached | egrep -c 'package.json'` == "1" -a `git diff --name-only --cached | egrep -c 'package.lock.json'` == "0" ]; then
echo "Warning: you are committing package.json without package.lock.json"
else
echo "Error: make sure you commit BOTH package.json and package.lock.json"
exit 1
fi
exit 0
git diff --name-only --cached
获取暂存文件列表(仅文件名)
|
使用上一个命令的结果作为下一个命令的参数
egrep
执行搜索(在这种情况下搜索字符串“package.json”和“package.lock.json”)
-c
计算匹配数
用反引号包裹整个命令将执行它并将结果提供给主脚本。
git+egrep 命令的结果返回找到的出现次数。然后检查这个结果是什么,告诉脚本继续(exit 0
)或退出(exit 1
)。
使脚本文件可执行,并在 package.json 中添加对它的引用:
"scripts": {
"check-package": "./bin/check-package.sh",
}
...
"pre-commit": [
"check-package"
]
应该是这样!
完成后,只需确保先只提交脚本,然后再提交 package.json(否则它已经在寻找脚本,但没有找到它)。
最后说明:此方法适用于检查暂存文件列表中需要同时存在的任何 2 个或更多文件。