Git 提交使用正则表达式还是 glob?

问题描述 投票:0回答:5

是否可以使用正则表达式,例如

git commit ".*my_file.*"

我尝试过,它似乎只将这些解释为globs。我也厌倦了正则表达式标志:

git commit -regex ".*my_file.*"`

抛出错误。

有人知道如何将正则表达式与 Git 命令结合起来吗?

regex git glob
5个回答
2
投票

我能想到的最好方法是使用 find 命令。例如,如果您只想要 python 文件:

find -type f -regex ".*\.py$" -exec git commit {} -m "committing only and all python files" \;

还有其他人能想到一些不那么笨重的东西吗?


1
投票

Git 本身不行。 Git 仅接收从 shell 传递的文件列表,因此由您的 shell 对文件进行正则表达式匹配。我不认为 bash 可以做到这一点,但其他 shell 可能可以。


0
投票

正如 mipadi 所提到的,参数可以由 shell 生成来生成

git
的输入。

例如,可以组合使用

ls
。假设我有一个 git init-ed 目录,其中包含以下文件:

.git/
my_new_project_file.py
my_older_project_file.py
some_other_file.py

我想添加除

some_other_file.py
之外的所有内容。为此:

ls my*project*.py | xargs git add

检查我的

git status
将显示
my_new_project_file.py
my_older_project_file.py
都已上演,而
some_other_file.py
已被忽略。

n.b.

ls
不支持正则表达式;只是通配符。


0
投票

正如 Candic3 所指出的,

git
支持 glob:

git add *my_file*

0
投票

答案似乎表明仅使用 git 是不可能的,但需要 shell。

如今这似乎不正确。这在 zsh 中对我有用:

git -C path/to/repo checkout '**package-lock.json'

在 zsh shell 中,引号内的内容不会被扩展,它会按原样传递,所以

git
一定是在解释 glob。

我希望这是跨平台的。

© www.soinside.com 2019 - 2024. All rights reserved.