npm scripts/package.json - 运行 只有当前在 git master 分支上
npm scripts/package.json - run only if currently on git master branch
我正在尝试制作一个脚本,如果 master 是当前签出的分支,它只会 运行...
我设法获得了分支名称:
git rev-parse --symbolic-full-name --abbrev-ref HEAD
但是把它放在脚本中,检查它的值并根据它做某事或其他事情并不顺利
"foo": "set branch=git rev-parse --symbolic-full-name --abbrev-ref HEAD | if [branch==master]; then echo \"yes\"; else echo \"no\"; fi;"
有什么想法吗?
以下将成功运行:
npm-script:
"scripts": {
"foo": "branch=$(git rev-parse --symbolic-full-name --abbrev-ref HEAD); if [[ $branch == \"master\" ]]; then echo \"yes\"; else echo \"no\"; fi;"
},
解释:
git
命令包含在 $()
中 - 也就是众所周知的 command substitution。这意味着它将 运行 git rev-parse ...
命令并将其输出分配给 branch
变量。
- 随后,使用以下条件检查
branch
值:if [[ $branch == \"master\" ]]; then ...
跨平台:
如果 npm run foo
命令在非 Bash 环境中执行,这显然会失败,例如 Windows cmd.exe
或 PowerShell.如果需要跨平台支持(我猜不是!),那么我建议在 node.js 脚本中处理此逻辑并利用 child_process.execSync()
调用 git
命令。然后可以通过您的 npm 脚本调用 node.js
。
我正在尝试制作一个脚本,如果 master 是当前签出的分支,它只会 运行...
我设法获得了分支名称:
git rev-parse --symbolic-full-name --abbrev-ref HEAD
但是把它放在脚本中,检查它的值并根据它做某事或其他事情并不顺利
"foo": "set branch=git rev-parse --symbolic-full-name --abbrev-ref HEAD | if [branch==master]; then echo \"yes\"; else echo \"no\"; fi;"
有什么想法吗?
以下将成功运行:
npm-script:
"scripts": {
"foo": "branch=$(git rev-parse --symbolic-full-name --abbrev-ref HEAD); if [[ $branch == \"master\" ]]; then echo \"yes\"; else echo \"no\"; fi;"
},
解释:
git
命令包含在$()
中 - 也就是众所周知的 command substitution。这意味着它将 运行git rev-parse ...
命令并将其输出分配给branch
变量。- 随后,使用以下条件检查
branch
值:if [[ $branch == \"master\" ]]; then ...
跨平台:
如果 npm run foo
命令在非 Bash 环境中执行,这显然会失败,例如 Windows cmd.exe
或 PowerShell.如果需要跨平台支持(我猜不是!),那么我建议在 node.js 脚本中处理此逻辑并利用 child_process.execSync()
调用 git
命令。然后可以通过您的 npm 脚本调用 node.js
。