首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Git预提交获取所有Python文件

Git预提交获取所有Python文件
EN

Stack Overflow用户
提问于 2020-11-20 19:18:08
回答 2查看 1.5K关注 0票数 1

我想在提交时运行黑色以格式化所有的分阶段.py文件。不幸的是,由于雇主网络虚拟专用网和限制,我无法使用预承诺包,因为它超时时,试图加载回购。

所以我决定写我自己的预提交钩子。目前我有这个

代码语言:javascript
复制
#!/bin/sh 

# Check if this is the initial commit 
if git rev-parse --verify HEAD >/dev/null 2>&1 
then 
    echo "pre-commit: About to create a new commit..." 
    against=HEAD 
else
    echo "pre-commit: About to create the first commit..."
    against=4b825dc642cb6eb9a060e54bf8d69288fbee4904 
fi 

# Autoformat with black
echo "pre-commit: Autoformatting Python code with black"
black $(git diff-index --cached --name-only --diff-filter=d $against)

我在亚特兰西安发现的第一部分。第二部分需要某种类型的过滤器才能从由diff返回的列中获取.py文件。如何从列表中只获取.py文件?

还有:我对git钩子很陌生。对于我和我的同事来说,这是一种确保所有代码都用黑色格式化的健壮方法吗?

EN

回答 2

Stack Overflow用户

发布于 2020-11-21 01:10:40

如果您正在寻找一种在bash中实现此操作的方法,那么拼图中缺少的部分就是git diff-index的筛选器。

在您的示例中,您可以对HEAD进行区分,这将将其限制为提交的文件名:

代码语言:javascript
复制
$ git diff --staged --name-only --diff-filter=d -- '*.py'
t.py

在原始文章中编写的表达式也有一点问题,因为文件中可能包含空格--通常的修复方法是在输出和xargs -0中使用xargs -0来运行该工具(这将导致文件名被'\0'分隔):

代码语言:javascript
复制
git diff --staged --name-only --diff-filter=d -z -- '*.py' |
    xargs -0 black

请注意,这可能会遗漏一些预提交框架会找到的文件--例如,使用python的无扩展可执行文件,或者其他传统上属于python的文件,如.pdbrc

票数 3
EN

Stack Overflow用户

发布于 2020-11-21 00:58:14

至于它的价值,使用预承诺,您可以使用local+system转义程序来避免下载工具(如果您已经安装了它们)

例如:

代码语言:javascript
复制
repos:
-   repo: local
    hooks:
    -   id: black-system
        name: black (system)
        entry: black
        types: [python]
        language: system
        require_serial: true

尽管如此,在很大程度上违背了框架的主要目的,因为它不再管理工具的安装(因此您必须自己手动设置它们)。

特别要注意的是,如果您没有安装黑色,您将看到如下内容:

代码语言:javascript
复制
$ pre-commit  run --all-files
black (system)...........................................................Failed
- hook id: black-system
- exit code: 1

Executable `black` not found

免责声明,我是预承诺的维护者

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64935598

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档