有没有办法让 git commit --verbose 在使用预提交挂钩时显示更新的差异?
Posted
技术标签:
【中文标题】有没有办法让 git commit --verbose 在使用预提交挂钩时显示更新的差异?【英文标题】:Is there a way to get git commit --verbose to show an updated diff when using pre-commit hooks? 【发布时间】:2019-07-02 04:05:39 【问题描述】:所以我目前正在设置一个 git pre-commit 挂钩来使用 iSort 和 python Black 对我的 python 文件进行 lint,我遇到的问题是,当我使用 git commit --verbose
时,出现在提交编辑器实际上并未考虑对暂存文件的修改。
例如,假设我有一个如下所示的 python 文件:
import re
from os import path
def x():
v = re.compile(r"1")
print(3, v)
def y(v=3):
z = path.join("a", "b")
thing = "a string"
print(thing, z)
根据我配置的 iSort 和黑色设置,我的预提交脚本会将文件更改为如下所示:
import re
from os import path
def x():
v = re.compile(r"1")
print(3, v)
def y(v=3):
z = path.join("a", "b")
thing = "a string"
print(thing, z)
不幸的是,在 git commit 编辑器中它仍然显示未修改的差异。有没有办法让编辑器得到正确的输出?
理论上我想这无关紧要,但很高兴看到差异实际上是什么。
【问题讨论】:
预提交挂钩阶段 (git add
) 是否更改了文件?
是的。在我提交并查看文件后,更改已完成并提交。
【参考方案1】:
不要使用预提交挂钩,而是尝试使用内容过滤器驱动程序,使用涂抹/清洁脚本可以:
结帐时让您的脚本成为一种方式 在提交时(或在 git diff 上)使您的脚本以另一种方式进行查看example here 或(for clean) here
(图片来自"Customizing Git - Git Attributes"来自“Pro Git book”))
【讨论】:
嗯,好主意。今天早上我尝试实施清洁/涂抹解决方案,但我仍然遇到了一些问题。差异和提交现在看起来很棒,因为它可以满足我的要求。奇怪的是,本地文件似乎根本没有被修改,但我希望它看起来与提交的文件相同。难道我做错了什么?这是我正在使用的清洁/涂抹脚本的副本pastebin.com/mCPg7rbE @DJSymBiotiX 目标是生成私有本地文件,而不是修改现有文件。 嗯,根据我最初的问题/问题,我想这不是我想要的。 @DJSymBiotiX 您可以修改现有文件,但您必须确保您的涂抹/清洁脚本是“对称的”:一个添加的更改会被另一个删除。然后touch yourFile
和git checkout -- .
强制涂抹脚本重新应用。
嗯,这似乎违反直觉。您无法真正“撤消” linting 函数。以上是关于有没有办法让 git commit --verbose 在使用预提交挂钩时显示更新的差异?的主要内容,如果未能解决你的问题,请参考以下文章
项目git commit时卡主不良代码:husky让Git检查代码规范化工作
Git 的 commit message 写错了,有办法进行修改么