我如何递归地通过位于不同目录的模式(或glob)添加文件?
例如,我想用一个命令添加A/B/C/foo.java和D/E/F/bar.java(以及其他几个java文件):
git add '*.java'
不幸的是,这并没有像预期的那样起作用。
我如何递归地通过位于不同目录的模式(或glob)添加文件?
例如,我想用一个命令添加A/B/C/foo.java和D/E/F/bar.java(以及其他几个java文件):
git add '*.java'
不幸的是,这并没有像预期的那样起作用。
当前回答
添加一个之前没有提到的Windows命令行解决方案:
for /f "delims=" %G in ('dir /b/s *.java') do @git add %G
其他回答
如果您已经在跟踪文件并对其进行了更改,现在您想根据模式有选择地添加它们,您可以使用——modified标志
git ls-files --modified | grep '<pattern>' | xargs git add
例如,如果您只想将CSS更改添加到此提交,您可以这样做
git ls-files --modified | grep '\.css$' | xargs git add
更多标志请参见man git-ls-files
有点偏离主题(不是特别与git相关),但如果你在linux/unix上,一个变通方法可以是:
find . -name '*.java' | xargs git add
如果你期望路径有空格
find . -name '*.java' -print0 | xargs -0 git add
但我知道这不是你想要的。
用zsh你可以运行:
git add "**/*.java"
所有的*.java文件将被递归添加。
添加一个之前没有提到的Windows命令行解决方案:
for /f "delims=" %G in ('dir /b/s *.java') do @git add %G
我只想添加基于git状态的特定字符串的文件:
Git 状态 |格雷普字符串 |xargs git add
然后能够git commit -m 'commit MSG来提交所有更改过的文件,文件标题中带有“string”