我如何递归地通过位于不同目录的模式(或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'
不幸的是,这并没有像预期的那样起作用。
当前回答
如果您已经在跟踪文件并对其进行了更改,现在您想根据模式有选择地添加它们,您可以使用——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 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 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
我只想添加基于git状态的特定字符串的文件:
Git 状态 |格雷普字符串 |xargs git add
然后能够git commit -m 'commit MSG来提交所有更改过的文件,文件标题中带有“string”
把行放在~/.gitconfig中
(化名) addt = ! sh - c“git ls-files | grep \ \”。$ 1 * \ " | xargs git add”——
如果你想添加所有修改过的java文件,只需做: Git addt Java
同样地,如果你想添加所有修改过的python文件,可以这样做: Git addt py
只需使用git添加*\*.java即可。这将添加根目录和所有子目录下的所有。java文件。
用zsh你可以运行:
git add "**/*.java"
所有的*.java文件将被递归添加。