有没有办法只列出已更改的目录?
如果我在git root上说~/project
我更改的文件是
~/project/subtool/file1
~/project/subtool/file2
~/project/subtool3/file1
我只想要
~/project/subtool
~/project/subtool3
答案 0 :(得分:5)
在您的方案中,我们假设您有以下提交:
$ git diff --name-status HEAD~1
M subtool/file1
M subtool/file2
M subtool3/file1
它会产生以下输出:
$ git diff --dirstat=files,0 HEAD~1
66.6% subtool/
33.3% subtool3/
确保添加,0
,否则git diff
默认情况下仅会显示至少有3%更改的目录。我还选择了files
,因为这是计算上最便宜的选项,而且您似乎并不关心具体的更改。
如果您能够使用sed
,则可以删除百分比值(您可能需要tweak the regular expression以满足您的需求):
$ git diff --dirstat=files,0 HEAD~1 | sed 's/^[ 0-9.]\+% //g'
subtool/
subtool3/
答案 1 :(得分:1)
使用git diff和参数--dirstat,例如
git diff --dirstat HEAD~100..HEAD
答案 2 :(得分:1)
此解决方案也适用于根目录中的文件:
git diff --name-only HEAD~1 | awk -F "/*[^/]*/*$" '{ print ($1 == "" ? "." : $1); }' | sort | uniq
根目录中的更改将列为.
git diff --dirstat=files,0 HEAD~1
的局限性在于它不会在根目录中显示更改。