diff is a small command-line tool that lets you compare the difference between two text files. It can output the difference formatted as a patch which can later be used to patch the original file so it becomes the changed one.
diff oldfile newfile is enough to see the differences between two files but the output is not very useful. It is more useful with the
--unified option which displays the differences and, by default, three lines of context around the changes between the two files compared.
diff -u oldfile newfile
The git source management system will use
diff -u when you
git makepatch. Many programmers expect that a diff between two C or C++ files is made using
diff -u. It is also what the
patch program for patching files against a
.diff file expects.
You can use number like 8 and the long variant of the
-u option as in
diff --unified=8 oldfile newfile to get more context around the changes (
-u=8 does not work):
diff --unified=8 oldfile newfile
The three line default is typically more than enough.
White spaces may be irrelevant to the changes you want to highlight when you compare two files. The
-w option can be used to ignore whitespaces:
diff -w oldfile newfile
Side By Side Comparsion
diff -y will show the differences between two files side by side with the original file on the left and the changed file on the right:
diff -y oldfile newfile
Note that the
diff -y formatting style can not be combined with other styles like
diff -u. You can combine
-w to ignore whitespaces.
diff can be used to compare directories recursively with the
-r option. This mode makes it show any differing files/folders and the changes between the files in those folders. This is useful if you have two almost identical folders like original_source and my_source_tree_branch that were based on the same tarball or tree:
diff -r original_source/ my_source_tree_branch/
The same recursive mode can be used to only show the names of the files that are different by adding
diff -rq original_source/ my_source_tree_branch/
- Manual page: diff.1