有没有办法只列出已更改的目录?
如果我在git root说, ~/project
我改变的文件是
~/project/subtool/file1
~/project/subtool/file2
~/project/subtool3/file1
我只是想
~/project/subtool
~/project/subtool3
Mar*_*vin 11
在您的方案中,假设您有以下提交:
$ git diff --name-status HEAD~1
M subtool/file1
M subtool/file2
M subtool3/file1
Run Code Online (Sandbox Code Playgroud)
它会产生以下输出:
$ git diff --dirstat=files,0 HEAD~1
66.6% subtool/
33.3% subtool3/
Run Code Online (Sandbox Code Playgroud)
确保添加,0,否则git diff默认情况下仅显示至少3%更改的目录.我也选择了,files因为这是计算上最便宜的选择,你似乎并不关心具体的变化.
如果你能够使用sed你可以摆脱百分比值(你可能想要调整一下正则表达式以满足你的需要):
$ git diff --dirstat=files,0 HEAD~1 | sed 's/^[ 0-9.]\+% //g'
subtool/
subtool3/
Run Code Online (Sandbox Code Playgroud)
此解决方案也适用于根目录中的文件:
git diff --name-only HEAD~1 | awk -F "/*[^/]*/*$" '{ print ($1 == "" ? "." : $1); }' | sort | uniq
Run Code Online (Sandbox Code Playgroud)
根目录中的更改将列为 .
的限制git diff --dirstat=files,0 HEAD~1是它不显示根目录中的更改。
xargs这是使用and代替ordirname之类的替代方法。sedawk
git diff HEAD~1 --name-only | xargs dirname | sort | uniq\nRun Code Online (Sandbox Code Playgroud)\ngit diff \xe2\x80\xa6将列出修改的文件路径。| xargs dirname会将文件路径转换为目录路径。| sort | uniq将删除重复项。.请注意,如果您修改了存储库根目录中的任何文件,这将生成一行。
Xyp*_*ron -2
使用 git diff 和参数 --dirstat,例如
git diff --dirstat HEAD~100..HEAD
Run Code Online (Sandbox Code Playgroud)