我设置了一些Git钩子来在 pre-commit 时运行一些 Gulp 命令。 我基本上运行 jshint/plato。 我基本上希望在两种情况下绕过这些钩子:
- hotfix 分支(master/hotfix)
- git merge(或找到一种不会在合并提交时崩溃的方法)
Plato Gulp 命令对源代码进行分析,并生成一个 /reports/ 目录,跟踪时间复杂度。 如果我们在 hotfix 分支上执行此操作,将导致将其合并回开发中时出现合并冲突。 这里是简单的钩子:
#!/bin/sh
if git diff --cached --name-only --diff-filter=ACM | grep '.js$' >/dev/null 2>&1
then
git stash -q --keep-index
./node_modules/.bin/gulp jshint
RESULT=$?
git stash pop -q
[ $RESULT -ne 0 ] && exit 1
git stash -q --keep-index
./node_modules/.bin/gulp plato
git add report/
git stash pop -q
fi
exit 0
现在的问题是,如果我在“reports”上有合并冲突,我解决了合并所有冲突都已解决,但您仍在合并中。
然后提交它运行分析并暂存提交,当提交时它会抛出错误:
/Users/Nix/work/project/.git/modules/somesubmodule/MERGE_HEAD'无法读取:没有这样的文件或目录。
该目录确实存在,但没有合并头...
git rev-parse -q --verify REBASE_HEAD
。 - Daan(git rev-parse -q --verify MERGE_HEAD) || (skip_this_if_merging)
。对于在合并时运行:(git rev-parse -q --verify MERGE_HEAD) && (only_run_this_if_merging)
。 - unforgiven1987git rev-parse -q --verify REBASE_HEAD
的结果仍然为true
。 我尝试了(git rev-parse -q --verify MERGE_HEAD || git rev-parse -q --verify REBASE_HEAD) || (skip_this_if_merging_or_rebasing)
。 - Harry Burns