是否可以使用正则表达式,例如
git commit ".*my_file.*"
?
我尝试过,它似乎只将这些解释为globs。我也厌倦了正则表达式标志:
git commit -regex ".*my_file.*"`
抛出错误。
有人知道如何将正则表达式与 Git 命令结合起来吗?
我能想到的最好方法是使用 find 命令。例如,如果您只想要 python 文件:
find -type f -regex ".*\.py$" -exec git commit {} -m "committing only and all python files" \;
还有其他人能想到一些不那么笨重的东西吗?
Git 本身不行。 Git 仅接收从 shell 传递的文件列表,因此由您的 shell 对文件进行正则表达式匹配。我不认为 bash 可以做到这一点,但其他 shell 可能可以。
正如 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
不支持正则表达式;只是通配符。
正如 Candic3 所指出的,
git
支持 glob:
git add *my_file*
答案似乎表明仅使用 git 是不可能的,但需要 shell。
如今这似乎不正确。这在 zsh 中对我有用:
git -C path/to/repo checkout '**package-lock.json'
在 zsh shell 中,引号内的内容不会被扩展,它会按原样传递,所以
git
一定是在解释 glob。
我希望这是跨平台的。