标签: pre-commit

运行预提交挂钩后要播放什么?

对于修改分阶段文件的预提交钩子,我需要弄清楚钩子运行后必须暂存的内容.

预提交钩子对应该提交的文件应用一些漂亮的打印.钩子执行以下任务:

  • 用空格替换制表符
  • 删除行尾的尾随空格
  • 删除双空行*)
  • 如果遗漏,请在文件末尾添加一个空行*)

标有*)的操作是导致下述问题的操作.

完成这些操作后,钩子会将修改后的文件添加到索引中git add $filename.这样,整个文件上演了,我不再只能提交修改后的文件的一小部分(即帅).

当然,我可以git add --no-verify绕过钩子,但是当使用时,该选项不可用git gui.此外,我希望在文件的分段行上应用漂亮的打印,所以绕过钩子不是我的目标.

有没有办法找出在应用漂亮打印后必须添加到索引中的内容,这样我可以在挂钩运行后播放正确的内容而不是暂存整个文件?


编辑1:
虽然David Brigada提供的答案看起来很有希望,但它不起作用:保持分阶段的变更完整(这是好的部分),但(至少在msysgit上)它将所有更改放入存储(不仅是未分级的)那些).当将存储重新弹回WC时,这会导致合并冲突,因为可能会修改分段行.git stash --keep-index


编辑2:David
的更新答案也没有成功,因为git拒绝将存储合并到脏WC中.


编辑3:来自larsks
回答指出了我的用法.在第一眼看来,这似乎是正确的,但我发现签入的版本是通过过滤器运行并且WC与签入版本不同,这让我很困惑.至少,这是我的经验,并得到Git Book中以下评论的支持:.gitattributes

如果您提交这些更改并再次签出该文件,您会看到正确替换关键字

我必须删除该文件,然后再次检查以查看过滤器应用的更改?没门!还有什么提示吗?

git hook pre-commit

7
推荐指数
1
解决办法
1827
查看次数

(GitKraken) 预提交失败退出代码:1

我正在使用 GitKraken (不确定是否相关),当我尝试提交时,我收到以下错误消息: 在此输入图像描述

当我按下“查看挂钩输出”按钮时,我得到以下信息:

预提交

husky > npm run -s 预提交(节点 v8.9.4)[?25l

npm > 运行 src/**/*.js 的任务

\ 纱线格式 git add (...这两行很多...)
\ 纱线格式 git add

“纱线格式”发现一些错误。请修复它们并再次尝试提交。纱线运行 v1.6.0 $ prettier-standard './src/**/*.js' C:\mypath\myfile.js info[访问 [0;1mhttps://yarnpkg.com/en/docs/cli/run有关此命令的文档。

prettier-eslint [错误] 由于 eslint 错误,eslint 修复失败 prettier-standard [错误] 格式化“C:\mypath\messages.js”时出现错误:TypeError:无法读取 null 属性“范围”

at SourceCode.getTokenBefore (c:\mypath\index.js:303:18)
at checkSpacingBefore (C:\mypath\template-curly-spacing.js:52:42)
at TemplateElement (C:\mypath\template-curly-spacing.js:117:17)
at listeners.(anonymous function).forEach.listener (C:\mypath\safe-emitter.js:47:58)
at Array.forEach (<anonymous>)
at Object.emit (C:\mypath\safe-emitter.js:47:38)
at NodeEventGenerator.applySelector (C:\mypath\node_modules\eslint\lib\utilode-event-generator.js:251:26)
at NodeEventGenerator.applySelectors (C:\mypath\node_modules\eslint\lib\util\node-event-generator.js:280:22)
at NodeEventGenerator.enterNode (C:\mypath\node-event-generator.js:294:14)
at CodePathAnalyzer.enterNode (C:\mypath\code-path-analyzer.js:608:23)
at Traverser.enter [as _enter] …
Run Code Online (Sandbox Code Playgroud)

git exit-code pre-commit pre-commit-hook gitkraken

7
推荐指数
1
解决办法
2万
查看次数

Prettier 使用 pre-commit(.com) 不会重新暂存更改

我开始使用 Prettier + eslint 使用pretty-quick& husky选项 2)。它的行为符合预期,即在提交(或修改)期间重新格式化代码并包含提交中的更改。

我的 monorepo 需要(几个)更多的预提交钩子,所以我最终迁移到pre-commit.com(选项 3)。现在,当我提交或修改时,Prettier 会修改文件并返回Failed状态。这造成了一个相当烦人的工作流程,我被迫添加文件并尝试再次提交更改。

有什么方法可以将更改重新暂存为提交的一部分吗?

pre-commit pre-commit-hook prettier pre-commit.com

7
推荐指数
2
解决办法
2607
查看次数

挂钩“black”需要预提交版本 2.9.2,但已安装版本 2.6.0

我在预提交和黑色方面遇到了麻烦。

一切工作正常,直到我用 清除缓存pre-commit clean。现在我总是收到错误

该挂钩black需要预提交版本 2.9.2,但已安装版本 2.6.0。也许运行`pip install --upgrade pre-commit

如果我检查我的版本,我正在运行最新的预提交版本 (v2.12.1)。另外,如果我运行推荐的命令,则不会发生任何变化,并且会出现相同的错误。如果我停用black挂钩,错误就会消失,所以我至少知道这是黑色的问题。

我尝试将黑色版本更改为stable最新版本,但没有任何帮助。

我有什么想法可以解决这个问题吗?

我的预提交配置:

  - repo: https://github.com/ambv/black
    rev: stable
    hooks:
      - id: black
        language_version: python3.8
        exclude: |
          (?x)(
              migrations/|
              config/|
              _build/|
              buck-out/|
              build/|
              dist/
          )
Run Code Online (Sandbox Code Playgroud)

非常感谢帮助

python git pre-commit pre-commit-hook pre-commit.com

7
推荐指数
1
解决办法
7911
查看次数

对 black 使用预提交钩子,并为 python 提供多种语言版本

我们使用预提交来使用黑色格式化我们的 Python 代码,并在以下配置中进行配置.pre-commit-config.yaml

\n
repos:\n  - repo: https://github.com/ambv/black\n    rev: 20.8b1\n    hooks:\n      - id: black\n        language_version: python3.7\n
Run Code Online (Sandbox Code Playgroud)\n

由于我们的包在不同的 Python 版本(例如,,3.7)中进行测试和使用,我希望能够在不同的 Python 版本上使用预提交 Hook。但是,当在 Python 上提交代码时,由于我的配置(见上文),我收到错误:3.83.93.8language_version

\n
C:\\Users\\FooBar\\Documents\\Programmierung\\foo (dev -> origin)\n\xce\xbb git commit -m "Black file with correct black version"\n[INFO] Initializing environment for https://github.com/ambv/black.\n[INFO] Installing environment for https://github.com/ambv/black.\n[INFO] Once installed this environment will be reused.\n[INFO] This may take a few minutes...\nAn unexpected error has occurred: CalledProcessError: command: (\'c:\\\\users\\\\FooBar\\\\anaconda\\\\python.exe\', \'-mvirtualenv\', …
Run Code Online (Sandbox Code Playgroud)

python git pre-commit pre-commit-hook pre-commit.com

7
推荐指数
1
解决办法
4237
查看次数

预提交不使用虚拟环境

我将此添加到pre-commit-config.yml

-   repo: local
    hooks:
    -   id: python-hook
        name: python-hook
        entry: python python_script.py
        language: python
        pass_filenames: false
Run Code Online (Sandbox Code Playgroud)

哪里python_script.py有以下内容

#!/usr/bin/env python

import os

print(os.environ["VIRTUAL_ENV"])

import requests

Run Code Online (Sandbox Code Playgroud)

该软件包requests安装在活动虚拟环境中,当我运行预提交时,我得到以下输出

/path/to/home/.cache/pre-commit/repouecs3sp4/py_env-python3.7
Traceback (most recent call last):
  File "python_script.py", line 7, in <module>
    import requests
ModuleNotFoundError: No module named 'requests'
Run Code Online (Sandbox Code Playgroud)

这里的问题是虚拟环境的路径显然被切换到了不同的路径/path/to/home/.cache/pre-commit/repouecs3sp4/py_env-python3.7

我在这里缺少什么吗?感谢您的帮助

git pre-commit pre-commit-hook python-3.x pre-commit.com

7
推荐指数
1
解决办法
1万
查看次数

使用预提交时在 VSCode 版本控制中访问 python 解释器

我在大多数 Python 项目中使用预提交,并且在其中许多项目中,我需要使用 pylint 作为本地存储库。当我想要提交时,我总是必须激活 python venv 然后提交;否则,我会收到以下错误:

black....................................................................Passed
pylint...................................................................Failed
- hook id: pylint
- exit code: 1

Executable `pylint` not found
Run Code Online (Sandbox Code Playgroud)

当我使用vscode版本控制提交时,我得到同样的错误;我搜索了这个问题,但没有找到任何解决方案来避免 VSCode 中的错误。

这是我的典型.pre-commit-config.yaml

repos:
-   repo: https://github.com/ambv/black
    rev: 21.9b0
    hooks:
    - id: black
      language_version: python3.8
      exclude: admin_web/urls\.py
-   repo: local
    hooks:
    -   id: pylint
        name: pylint
        entry: pylint
        language: python
        types: [python]
        args: 
         - --rcfile=.pylintrc

Run Code Online (Sandbox Code Playgroud)

python pre-commit pre-commit-hook visual-studio-code pre-commit.com

7
推荐指数
1
解决办法
1630
查看次数

预提交与毒性 | 有什么区别| 使用范围

毒物:https: //tox.wiki/en/latest/

预提交: https://pre-commit.com/

我想了解这两种选择的界限。

我知道预提交会创建一个 py 环境 - 与 tox 相同。对我来说,他们的架构看起来有点相似。

有些人将它们结合使用...... pre-commit 不能做什么,tox 可以?我看到了一些示例,其中通过 CI 管道期间的预提交,您可以运行单元测试等。

哪一个最适合集成到 CI 构建中?

python continuous-integration pre-commit tox pre-commit.com

6
推荐指数
1
解决办法
2421
查看次数

使用mirrors-mypy 进行预提交错误,如何修复?

我在运行“pre-commit run --all-files”时收到以下错误,并且在尝试提交时出现以下错误,这是一些 python 错误,使用的 python 版本是“Python 2.7.16”。

\n
[INFO] Installing environment for https://github.com/pre-commit/mirrors-mypy.\n[INFO] Once installed this environment will be reused.\n[INFO] This may take a few minutes...\nAn unexpected error has occurred: CalledProcessError: command: ('/Users/user/.cache/pre-commit/repoq_mv31g8/py_env-default/bin/python', '-mpip', 'install', '.', 'tokenize-rt==3.2.0', 'pydantic')\nreturn code: 1\nexpected return code: 0\nstdout:\n    Processing /Users/user/.cache/pre-commit/repoq_mv31g8\n      Preparing metadata (setup.py): started\n      Preparing metadata (setup.py): finished with status 'done'\n    Collecting tokenize-rt==3.2.0\n      Using cached tokenize_rt-3.2.0-py2.py3-none-any.whl (6.1 kB)\n    Collecting pydantic\n      Using cached pydantic-1.9.0-cp310-cp310-macosx_11_0_arm64.whl (2.4 MB)\n    Collecting mypy==0.782\n      Using cached mypy-0.782-py3-none-any.whl (2.4 MB)\n    Collecting mypy-extensions<0.5.0,>=0.4.3\n …
Run Code Online (Sandbox Code Playgroud)

pre-commit pre-commit-hook mypy pre-commit.com apple-m1

6
推荐指数
1
解决办法
6464
查看次数

已卸载的预提交阻止“git commit”(pipenv)

我最近从我的环境中卸载了预提交。我在 pipelinev 中执行了以下操作:

pipenv --rm
<deleted Pipfile and Pipfile.lock>
pipenv install -r requirements.txt 
Run Code Online (Sandbox Code Playgroud)

我确保预提交模块不再位于requirements.txt 中。当我进行 git 提交时,我得到:

~/my_project/.venv/bin/python: No module named pre_commit
Run Code Online (Sandbox Code Playgroud)

这阻止了我提交,而且我不知道这是从哪里来的,因为未安装预提交。此外,指定的回溯路径指向 python 而不是 python3。我缺少什么?

pre-commit pre-commit-hook python-3.x pipenv pre-commit.com

6
推荐指数
2
解决办法
9710
查看次数