Mic*_*mer 160 git glob filepattern
如何通过位于不同目录中的模式(或glob)递归添加文件?
例如,我想用一个命令添加A/B/C/foo.java和D/E/F/bar.java(以及其他几个java文件):
git add '*.java'
不幸的是,这不能按预期工作.
Ser*_*tov 147
您可以使用git add [path]/\*.java从子目录添加java文件,
例如git add ./\*.java当前目录.
来自git add文档:
添加目录及其子目录
*.txt下的所有文件的内容Documentation:Run Code Online (Sandbox Code Playgroud)$ git add Documentation/\*.txt请注意,
*在此示例中引用了星号的星号; 这使命令包含Documentation/目录子目录中的文件.
Cas*_*bel 82
如果可能尚未跟踪某些要添加的文件,Sergio Acosta的回答可能是您最好的选择.如果你想限制自己已经知道的文件,你可以结合git-ls-files过滤器:
git ls-files [path] | grep '\.java$' | xargs git add
Git没有提供任何花哨的机制来执行此操作,因为它基本上是一个shell问题:如何获取要作为给定命令的参数提供的文件列表.
Ser*_*sta 54
有点偏离主题(不是专门与git相关)但是如果你在linux/unix上有一个解决方法可能是:
find . -name '*.java' | xargs git add
如果你期望路径有空格:
find . -name '*.java' -print0 | xargs -0 git add
但我知道这不完全是你问的.
Oli*_*ier 52
有了zsh你可以运行:
git add "**/*.java"
并且所有*.java文件都将以递归方式添加.
Alb*_*rto 12
谢尔盖的回答(不要相信我)正在发挥作用:
Run Code Online (Sandbox Code Playgroud)You can use git add [path]/\*.java
最近的一个git:
$git version
git version 1.7.3.4
测试文件:
$find -name .git -prune -o -type f -print | sort
./dirA/dirA-1/dirA-1-1/file1.txt
./dirA/dirA-1/dirA-1-2/file2.html
./dirA/dirA-1/dirA-1-2/file3.txt
./dirA/dirA-1/file4.txt
./dirB/dirB-1/dirB-1-1/file5.html
./dirB/dirB-1/dirB-1-1/file6.txt
./file7.txt
Git状态:
$git status -s
?? dirA/
?? dirB/
?? file7.txt
添加*.txt:
$git add \*.txt
更新状态:
$git status -s
A  dirA/dirA-1/dirA-1-1/file1.txt
A  dirA/dirA-1/dirA-1-2/file3.txt
A  dirA/dirA-1/file4.txt
A  dirB/dirB-1/dirB-1-1/file6.txt
A  file7.txt
?? dirA/dirA-1/dirA-1-2/file2.html
?? dirB/dirB-1/dirB-1-1/file5.html
pti*_*tim 10
由于这里没有提到,还请考虑“魔术签名”:/以递归方式添加项目根目录下匹配的任何内容:
git add :/*.{java,pom}
发送至:https ://stackoverflow.com/a/64210713/2586761
如果您已经在跟踪文件并对其进行了更改,现在您想根据模式选择性地添加它们,则可以使用该--modified标志
git ls-files --modified | grep '<pattern>' | xargs git add
例如,如果您只想将CSS更改添加到此提交,则可以执行此操作
git ls-files --modified | grep '\.css$' | xargs git add
请参阅man git-ls-files更多标志
添加尚未提及的 Windows 命令行解决方案:
for /f "delims=" %G in ('dir /b/s *.java') do @git add %G