Fla*_*che 10 git husky lint-staged git-husky
TLDR:git rev-parse -q --verify MERGE_HEAD不处于合并状态时会出错。当我们处于合并状态时,如何获得会出错的类似命令?
问题:当我将 master 合并到我的分支并且它存在冲突时,我必须手动更正它们,然后提交。但在某些情况下,我有太多来自 master 的更改,所以我宁愿跳过预提交挂钩。
部分解决方案:我可以运行git commit --no-verify并合并内容,但那是因为我知道该标志。其他开发人员可能不知道这一点,因此(1)他们花费了比需要更多的时间来等待预提交挂钩运行,并且(2)因为这可能需要很长时间,他们往往不太可能重新合并主节点(假设) 。
几乎确定的解决方案:我找到了一种通过使用 来检测我是否处于合并状态的方法git rev-parse -q --verify MERGE_HEAD。当处于合并状态时,它返回一个哈希值,当不处于合并状态时,它会出错。但我需要的恰恰相反。当我处于合并状态时,我需要它出错,因此我可以将它作为预提交挂钩添加到我的所有挂钩中。这会使他们在第一行失败,然后不执行以下命令。
"husky": {
"hooks": {
"pre-commit": "lint-staged"
}
},
"lint-staged": {
"*.js": [
"git rev-parse -q --verify MERGE_HEAD",
"eslint --max-warnings 0 --fix"
],
"*.scss": [
"git rev-parse -q --verify MERGE_HEAD",
"stylelint 'app/**/*.scss'"
],
"*.{js,json,yml,scss,md}": [
"git rev-parse -q --verify MERGE_HEAD",
"prettier --write"
],
"*": [
"bundle exec rubocop --auto-correct --force-exclusion"
]
},
Run Code Online (Sandbox Code Playgroud)
请注意,上面提到的方法不起作用。为了让它工作,我们需要的只是反转 的效果git rev-parse -q --verify MERGE_HEAD,即,当我们处于合并状态时它应该出错。我怎样才能用一个简单的命令来做到这一点?
小智 5
如果您不想lint-staged在修复合并冲突后在预提交挂钩上运行脚本,那么您可以执行类似于下面的代码片段的操作。我添加--no-revs只是为了不显示不需要的输出
"husky": {
"hooks": {
"pre-commit": "git rev-parse -q --no-revs --verify MERGE_HEAD || lint-staged"
}
},
Run Code Online (Sandbox Code Playgroud)
您是否考虑过否定最初命令的结果?例如
git rev-parse -q --verify MERGE_HEAD && false
Run Code Online (Sandbox Code Playgroud)
如果您处于合并过程中,则右侧为 true,因此false会进行评估,并且命令会以状态码退出1。
| 归档时间: |
|
| 查看次数: |
6476 次 |
| 最近记录: |