git diff --name-only用法问题:搭配black格式化仅识别ipynb文件
问题原因
你当前的写法存在两个核心错误,导致.py后缀的变更文件没有被git diff识别输出:
git diff的路径过滤规则需要统一放在单个--分隔符之后,你拆分了两个--,第二个--会被git识别为路径匹配规则的一部分,无法正确匹配到.py后缀的文件- 调用black时多余的前置
--没有必要,除非你要处理的文件名以-开头避免被识别为命令参数
正确用法
基础场景(匹配当前目录变更的.ipynb和.py文件)
black $(git diff --name-only -- *.ipynb *.py)
全目录匹配场景(匹配所有层级子目录下的对应后缀变更文件)
给glob规则加单引号避免shell提前展开,让git处理全路径匹配:
black $(git diff --name-only -- '*.ipynb' '*.py')
包含已暂存文件的场景
如果你要处理已经执行过git add的暂存区变更文件,添加--cached参数:
black $(git diff --cached --name-only -- '*.ipynb' '*.py')
匹配所有未提交变更(包含工作区+暂存区)
和HEAD提交对比获取所有未提交的变更文件:
black $(git diff HEAD --name-only -- '*.ipynb' '*.py')
注意:如果你的
.py文件是未被git跟踪的新文件,git diff默认不会输出这类文件,你需要先执行git add 文件名将其加入git跟踪范围后再执行上述命令。
内容的提问来源于stack exchange,提问作者abdellah
相关产品推荐
相关产品推荐

