Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
821 views
in Technique[技术] by (71.8m points)

git diff - only show which directories changed

Is there a way to list only the directories that were changed?

If I'm at the git root say, ~/project

Files I changed are

~/project/subtool/file1

~/project/subtool/file2

~/project/subtool3/file1

I just want

~/project/subtool

~/project/subtool3

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

You could use git-diff with the --dirstat parameter.

In your scenario, let's say you have the following commit:

$ git diff --name-status HEAD~1
M       subtool/file1
M       subtool/file2
M       subtool3/file1

It would produce the following output:

$ git diff --dirstat=files,0 HEAD~1
  66.6% subtool/
  33.3% subtool3/

Make sure to add ,0, otherwise git diff will by default only show directories with at least 3% changes. I also chose files as this is the computationally cheapest option and you do not seem to care about specific changes anyway.

If you are able to use sed you can get rid of the percentage values (you may want to tweak the regular expression a bit to fit your needs):

$ git diff --dirstat=files,0 HEAD~1 | sed 's/^[ 0-9.]+% //g'
subtool/
subtool3/

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...