The git diff --dirstat
command is a powerful tool in Git that allows you to evaluate the amount of change that has happened in each directory of your project. This command gives you an overview of the proportion of changes in each directory, as compared to the total changes in the repository.
Let’s break down the command:
git diff
: This is a basic Git command that shows the differences between two commits, or between the working directory and the index.--dirstat
: This is an option you can pass togit diff
. Thedirstat
part of this option stands for “directory statistics”. With this option, Git doesn’t just show the exact changes between files, but instead summarizes the changes per directory. This summary is provided as a percentage of total changes in the entire codebase.
To use git diff --dirstat
, follow these steps:
- Open a terminal.
- Navigate to your Git repository.
- Run
git diff --dirstat
.
By default, git diff --dirstat
will compare your working directory (the state of your files right now) with the last commit. If you want to compare between two specific commits, you can provide their commit hashes, like so: git diff --dirstat <commit1>..<commit2>
.
When you run the git diff --dirstat
command, you’ll get output that looks something like this:
44.4% src/main/
55.6% src/test/
In this example, 44.4% of the total changes in your codebase are in the src/main/
directory, and 55.6% are in the src/test/
directory.
Please note that the percentages given by --dirstat
are calculated by comparing the number of lines changed in each directory to the total number of lines changed in all directories. It doesn’t tell you the absolute number of lines changed, just the proportion compared to other directories.
It’s also important to note that by default --dirstat
considers all changes equally, whether they’re additions, deletions, or modifications. If you want to see only additions or only deletions, you can use the --dirstat=lines
or --dirstat=files
options.
This is a simple, yet effective way to get a quick overview of where most changes are happening in your project. It can be very useful when trying to understand a large project, or when trying to gauge the impact of a particular feature or bug fix.