我如何递归地通过位于不同目录的模式(或glob)添加文件?

例如,我想用一个命令添加A/B/C/foo.java和D/E/F/bar.java(以及其他几个java文件):

git add '*.java'

不幸的是,这并没有像预期的那样起作用。


当前回答

把行放在~/.gitconfig中

(化名) addt = ! sh - c“git ls-files | grep \ \”。$ 1 * \ " | xargs git add”——

如果你想添加所有修改过的java文件,只需做: Git addt Java

同样地,如果你想添加所有修改过的python文件,可以这样做: Git addt py

其他回答

用zsh你可以运行:

git add "**/*.java"

所有的*.java文件将被递归添加。

我只想添加基于git状态的特定字符串的文件:

Git 状态 |格雷普字符串 |xargs git add

然后能够git commit -m 'commit MSG来提交所有更改过的文件,文件标题中带有“string”

如果要添加的一些文件可能还没有被跟踪,Sergio Acosta的答案可能是您的最佳选择。如果你想把自己限制在git已经知道的文件中,你可以把git-ls-files和一个过滤器结合起来:

git ls-files [path] | grep '\.java$' | xargs git add

Git本身并没有提供任何花哨的机制来实现这一点,因为它基本上是一个shell问题:如何获得作为给定命令的参数提供的文件列表。

由于这里没有提到,还可以考虑“魔术签名”:/来递归地添加项目根目录下的任何匹配项:

git add :/*.{java,pom}

Tx到:https://stackoverflow.com/a/64210713/2586761

只需使用git添加*\*.java即可。这将添加根目录和所有子目录下的所有。java文件。