0

package-lock.json这些天我有一个无意推动的问题。

前任)

npm install在我的功能分支中运行并且我package-lock.json的已更新。

我做了一个提交,我的功能分支被合并到开发分支中。Package-lock.json开发分支package-lock.json中被我的功能分支覆盖。

由于更新了 中的软件包package-lock.json,它破坏了应用程序。


我知道我必须小心不要推动package-lock.json,除非package.json发生了变化,但是,有时我会忘记。

所以我在想我是否可以在预提交中添加一些规则,以便在我package-lock.json只提交时显示一些警告。有没有办法实现它?

谢谢你

4

1 回答 1

1

如果您已经在使用“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 个或更多文件。

于 2019-03-11T12:53:56.337 回答