Dirdiff is a graphical tool for displaying the differences between
directory trees and for merging changes from one tree into another.
Dirdiff can handle up to 5 trees. It displays a main window with a
list of the files which are different between the trees, with colored
squares to indicate the relative ages of the versions. A menu allows
you to display the differences between any two of the versions in
another window. Another menu allows you to copy the file from one
tree to another.
The differences window basically displays the output of `diff -u' with
colored backgrounds to indicate which version each line comes from.
The differences window also has a series of checkboxes which allow you
to selectively apply changes from one version to another. You apply
the selected changes using the merge menu. Dirdiff will then pop up
another window containing the merged file. You can then edit the
merged version and save it back into file.
Dirdiff now also has a file mode, which can be used for viewing the
differences between files and for merging changes from one file into
another. This mode is invoked if regular files are specified on the
command line (or in the new directory/file chooser, see below) rather
than directories. (Dirdiff will exit with an error message if some
files and some directories are specified.)
What's new in dirdiff-2.1.
* The diff display window can now display 3-way, 4-way and 5-way diffs
as well as the normal 2-way diffs. When a line is identified as
coming from multiple files, most of it will be colored for the
newest of those files, and extra colored bars at the left of the
line will identify which other files it is in.
* You can now modify the diff display interactively (for example, to
make it more understandable). You can use the middle mouse button
to drag the blue separator bars to expose more context, or drag
colored diff lines up and down (the movement is constrained so as to
not alter the meaning of the diff). Dragging context lines splits
them into colored diff lines.
* There is now a menu on the diff display window for generating
patches embodying the changes that could be made with the merge
menu. That is, the diff lines that are checked in the diff viewer
will be made into - and + lines in the generated patch.
* The BitKeeper integration feature has been removed. I plan to add
generic features for integration with arbitrary SCM systems in
What was new in dirdiff-2.0.
* Some great new features from Dorothy Robinson:
- A dialog box for choosing the directories to be diffed, if dirdiff
is invoked without specifying any directories or files on the
- Colored icons instead of squares in the file list window.
- Colored icons in the Diff and Copy/Del menus (provided you are
using Tk 8.4 or later).
- Modifications so dirdiff can be used under Windows.
- A color key showing the ordering of the colors.
- Use of two-level menus for the Diff, Copy/Del and Patch menus (the
Diff and Copy/Del menus use two levels only when there are
sufficient alternatives for it to make things simpler).
- A filename search function using the filename bar in the file list
- Options to allow the user to select external diff and file viewer
* There is now a mode for ignoring files in a directory if they match
any of the patterns listed in the .cvsignore in that directory.
This is invoked with the -C command-line option or by choosing the
"Ignore files in .cvsignore" option in the Options menu.
* Some users have requested a mode in which, when a directory exists
in one tree but not another, dirdiff display the files in that
directory as existing in the one tree but not the other (rather than
displaying just a single line for the directory). This mode is
enabled by choosing the "Show files that aren't in some dirs" option
in the Options menu.
* Trees can now be marked as "read-only" in the Options menu. This
means that menu options that would modify those trees (in the
Copy/Del, Touch and Merge menus) will not be offered.
* Files can be added to the excluded file list by selecting them and
choosing "Exclude selection" under the File menu.
* Changes to the "Underline tabs" mode now take effect immediately.
Dirdiff is a Tcl/TK script, so no compilation is required. Dirdiff
however can make use of a shared library called filecmp.so.0.0 for
comparing files. This is optional, but it has two benefits: (a)
comparing files is faster with filecmp.so.0.0 (without it, dirdiff has
to start an external process running `cmp'), and (b) filecmp.so.0.0
can optionally ignore RCS and BK strings when it is comparing two files.
The Makefile in this directory will compile filecmp.so.0.0, and
install it and dirdiff. By default dirdiff is installed in /usr/bin
and filecmp.so.0.0 is installed in /usr/lib. Doing `make' will
compile filecmp.so.0.0; `make install' will install dirdiff and
To use dirdiff, you invoke it from the command line with a list of
directories (between 2 and 5). For example, suppose I have 3 copies
of the Linux kernel source code, in directories called linux, bk, and
pmac. I can see the differences between these 3 trees with a command
$ dirdiff linux bk pmac
This will display the file list window and start comparing the trees,
displaying files which differ as they are found. To see the
differences between two versions, click on the file name and then
select the versions to compare from the Diff menu. To copy from one
tree to another, click on the file name and select the copy operation
from the Copy menu.
In the differences window, there are checkboxes to the left of all the
sections which are different. You can use button 1 to select an
individual checkbox, or shift-button 1 or button 3 to select a whole
group. Selecting a line means that you are asking for that change to
be made when you update either of the files using the Merge menu. The
line will be removed if it is already present or added if it is not
Starting with dirdiff-2.0, you can start dirdiff without any arguments
and it will pop up a dialog box where you can enter the directories to