有什么方法可以防止 commintng package-lock.json unless package.json has changed?
Is there any way to prevent from commintng package-lock.json unless package.json has changed?
这几天有一个问题就是无意中推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
,我是否可以在预提交中添加一些规则以显示一些警告。有什么办法可以实现吗?
谢谢
如果您已经在使用 Git 钩子,例如 "pre-commit",您基本上可以在 "pre-commit" 列表中再添加一个脚本,然后编写一个脚本来执行您需要的操作(代码如下).
使用 git/grep 命令的组合,您可以检查暂存文件列表中是否存在 "package.json" 和 "package-lock.json"(或者其中 none ).
脚本可以是:
#!/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 命令的结果returns 找到的出现次数。然后检查结果是什么,告诉脚本继续 (exit 0
) 或退出 (exit 1
)。
使脚本文件可执行,并在 package.json:
中添加对它的引用
"scripts": {
"check-package": "./bin/check-package.sh",
}
...
"pre-commit": [
"check-package"
]
应该就是了!
完成后,请确保首先只提交脚本,然后 package.json(否则它已经在寻找脚本,但找不到)。
最后说明:
此方法可有效检查暂存文件列表中需要同时存在的任何 2 个或更多文件。
这几天有一个问题就是无意中推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
,我是否可以在预提交中添加一些规则以显示一些警告。有什么办法可以实现吗?
谢谢
如果您已经在使用 Git 钩子,例如 "pre-commit",您基本上可以在 "pre-commit" 列表中再添加一个脚本,然后编写一个脚本来执行您需要的操作(代码如下).
使用 git/grep 命令的组合,您可以检查暂存文件列表中是否存在 "package.json" 和 "package-lock.json"(或者其中 none ).
脚本可以是:
#!/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 命令的结果returns 找到的出现次数。然后检查结果是什么,告诉脚本继续 (exit 0
) 或退出 (exit 1
)。
使脚本文件可执行,并在 package.json:
中添加对它的引用"scripts": {
"check-package": "./bin/check-package.sh",
}
...
"pre-commit": [
"check-package"
]
应该就是了!
完成后,请确保首先只提交脚本,然后 package.json(否则它已经在寻找脚本,但找不到)。
最后说明: 此方法可有效检查暂存文件列表中需要同时存在的任何 2 个或更多文件。