Comparison of file comparison tools
This article compares computer software tools which are used for accomplishing comparisons of files of various types. The file types addressed by individual file comparison apps varies, but may include text, symbols, images, audio, or video. This category of software tool is often called "file comparison" or "diff tool", but those effectively are equivalent terms — where the term "diff" is more commonly associated with the Unix diff
utility.
A typical rudimentary case is the comparison of one file against another. However, it also may include comparisons between two populations of files, such as in the case of comparing directories or folders, as part of file management. For instance, this might be to detect problems with corrupted backup versions of a collection of files ... or to validate a package of files is in compliance with standards before publishing.
Note that comparisons must be made among the same file type. Meaning, a text file cannot be compared to a picture containing text, unless an optical character reader (OCR) process is done first to extract the text. Likewise, text cannot be compared to spoken words, unless the spoken words first are transcribed into text. Additionally, text in one language cannot be compared to text in another, unless one is translated into the language of other.
A critical consideration is how the two files being compared must be substantially similar and thus not radically different. Even different revisions of the same document — if there are many changes due to additions, removals, or moving of content — may make comparisons of file changes very difficult to interpret. This suggests frequent version saves of a critical document, to better facilitate a file comparison.
A "diff" file comparison tool is a vital time and labor saving utility, because it aids in accomplishing tedious comparisons. Thus, it is a vital part of demanding comparison processes employed by individuals, academics, legal arena, forensics field, and other professional endeavors — to identify sometimes hard to spot differences needed for detecting.
These uses include:
- Revisions of texts, plans, or drawings.
- Edit changes in media.
- Omission of credit for quotes, citations, extracts, or exemplars.
- Plagiarism.
- Alteration of legal documents.
- Fraud.
- Forgery.
- Fakery, or "deepfake" to impersonate.
- Disputes over ownership or credit for cooperative efforts.
- Chronology of evolution of a project or effort.
- Detect steganography (the practice of hiding data in plain sight).
- Uncover removal of watermarks.
- Intentional defacement.
- Identification of graffiti, tattoo, or other cultural mark with a signature style.
- Unintentional or incidental damage.
- Changes in health of living being.
- Risk evaluation of propagation of structural damage.
- Evaluation for restoration.
- Degradation due to effects of environmental exposure over time, including natural entropy (decline over time):
- Oxidation.
- Rain exposure.
- Abrasion from wind-driven sand.
- Weathering from environmental changes in temperature, such as caused by freeze-thaw cycles.
- Fugitive (i.e. no permanent) pigments in paintings or printed materials from exposure to ultraviolet light.
- Exposure to vibration, such as industrial processes are from vehicular traffic.
General
Basic general information about file comparison software.
Name | Creator | FOSS | Free | First public release date | Year of latest stable version | Windows | Macintosh | Linux | Other platforms | Max supported file size |
---|---|---|---|---|---|---|---|---|---|---|
Beyond Compare | Scooter Software[1] | No; Proprietary | No | 1996 | 2022-7-20 (v4.4.3) | Yes | Yes | Yes | > 2GB (64 bits) | |
Compare++ | Coode Software[2] | No; Proprietary | No | 2010 | 2016-7-17 (3.0.1.0b) | Yes[3] | No | No | ||
diff, diff3 | AT&T | Yes; BSD 3-clause, BSD 4-clause, CDDL, GPL, Proprietary | Yes | 1974 | No | Yes (Mac OS X) | Yes | ported to most platforms as part of SCCS | > 2GB but less than 64 bits | |
Eclipse (compare) | Yes; Eclipse Public License | Yes | 2004-07-21 | 2016-09-28 (4.6.1 (Neon.1)) | Yes | Yes | Yes | Anything with Java | ||
Ediff | Michael Kifer[4] | Yes; GPL | Yes | 1994 | 2.81.4 | Yes[5] | Yes (Mac OS X) | Yes | Anything with Emacs and diff | |
ExamDiff Pro | PrestoSoft[6] | No; Proprietary | No | 1998 | 2022-06-04 (v 12.0.1.22) | Yes (WinXP and up) | No | No | ||
Far Manager (compare) | Eugene Roshal (original); FAR Group | Yes; Revised BSD license | Yes | 1996 | 2022-02-02 (v3.0 build 5959) | Yes | No | No | There's a beta-version of far2l,[7] a Linux fork of FAR Manager v2 which also works on OSX/MacOS and BSD. | |
fc | Microsoft[8] | No; Proprietary | Yes; Part of OS | 1987 | Yes (DOS) | No | No | |||
FileMerge (aka opendiff) | Apple Inc. | No; Proprietary | Yes; (part of Apple Developer Tools) | 1993 (part of NEXTSTEP 3.2[9]) | 2014 (v2.8) | No | Yes (Mac OS X) | No | ||
FreeFileSync | Zenju | Yes; GPLv3 | Yes | 2008 | 2020-12-04 (v11.4) | Yes | Yes | Yes | ||
Guiffy SureMerge | Guiffy Software[10] | No; Proprietary | No | 2000 | 2022-09-06 (v12.1) | Yes | Yes | Yes | Anything with Java | > 2GB |
IntelliJ IDEA (compare) | JetBrains[11] | No; Proprietary | No | 2001 | 2019-08-20 (2019.2.1) | Yes | Yes | Yes | ||
jEdit JDiff plugin | Various[12] | Yes; GPL | Yes | 1998 | 2020-09-03 (5.6.0) | Yes | Yes | Yes | Anything with Java | |
Lazarus Diff | Lazarus (software) | Yes; GPL | Yes | 2000 | 2020-07-11 (2.0.10) | Yes | Yes | Yes | FreeBSD | |
Meld | Stephen Kennedy[13] | Yes; GPLv2+ | Yes | 2002 | 2020-02-16 (3.20.2) | Yes[14] | Yes | Yes | BSD, Solaris | |
Notepad++ (compare) | Various | Yes; GPLv3 | Yes | 2009 | 2015-01-06 (1.5.6.6) | Yes[15] | No | No | ||
Perforce P4Merge | Perforce | No; Proprietary | Yes | 2019 (2019.1/1815056) | Yes | Yes | Yes | Sun Solaris | ||
Pretty Diff | Austin Cheney[16] | Yes; MIT-compatible | Yes | 2009 | 2019-09-02 (101.2.6) | Yes (Web) | Yes (Web) | Yes (Web) | Node.js | |
Tkdiff | Tkdiff[17] | Yes; GPLv2+ | Yes | 2003 (or before) | 2021-03-24 (v5.2.1) | Yes (Tcl) | Yes (Tcl) | Yes (Tcl) | Anything with Tcl | |
Total Commander (compare) | Christian Ghisler[18] | No; Proprietary | No | 2020-03-25 (v9.51) | Yes | No | No | |||
twdiff (TextWrangler Diff Helper) | Bare Bones Software, Inc.[19] | No; Proprietary | Yes; with TextWrangler | 2012 (1.0 (v22)) | No | Yes | No | No | ||
vimdiff | Bram Moolenaar et al. | Yes; GPL-compatible [20] | Yes | 2001 | 2016-10-03 (v8.0.0022) | Yes | Yes | Yes | Anything with vim | |
WinDiff | Microsoft[21] | No; Proprietary | Yes; Part of Platform SDK | 1992 | 2010-05-14 (v6.1.7716.0) | Yes | No | No | No | |
WinMerge | Dean Grimm[22] | Yes; GPL | Yes | 1998 | 2022-01-27 (v2.16.18) | Yes (Win95 and up) | Yes (in wine[23]) | Yes (in wine[23]) | 2 GB | |
UCC | USC CSSE[24] | No; USC-CSSE Limited Public License | Yes | 2009 | 2015-12-30 (2015.12) | Yes | Yes | Yes {2.6.9} | Sun Solaris | |
Name | Creator | FOSS | Free | First public release date | Year of latest stable version | Windows | Macintosh | Linux | Other platforms | Max supported file size |
Compare features
Name | Show in-line changes | Directory comparison | Binary comparison | Moved lines | 3-way comparison | Merge | Structured comparison[25] | Manual compare alignment | Image compare |
---|---|---|---|---|---|---|---|---|---|
Beyond Compare | Yes | Yes | Yes | No | Yes (Files and Folders) | Yes (Pro only) | Yes | Yes | |
Compare++ | Yes | Yes | Yes | Yes | Yes (C/C++,C#,Java,Javascript,CSS3) | ||||
diff | No | Yes | partly | No | No | No | |||
diff3 | No | No | Yes (non-optional) | ||||||
Eclipse (compare) | Yes | No (only ancestor) | Yes | No | |||||
Ediff | Yes | Yes | Yes | Yes | Yes | ||||
ExamDiff Pro | Yes | Yes | Yes | Yes[26] | Yes (ExamDiff Pro Master only)[27] | Yes | manual synchronization | ||
Far Manager (compare) | Yes (Via plugin) [28] | Yes | Yes | Yes (Via plugin) [28] | No | No | |||
fc | No | No | Yes | No | No | ||||
FileMerge (aka opendiff) | Yes | Yes | Yes | Yes (optional ancestor) | Yes | ||||
Guiffy SureMerge | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
IntelliJ IDEA (compare) | Yes | Yes | Yes | No | Yes | Yes | Yes | Yes | |
jEdit JDiff plugin | Yes | No | Yes | ||||||
Lazarus Diff | |||||||||
Meld | Yes | Yes | No | No | Yes | Yes | line alignment, unlink scroll | ||
Notepad++ (compare) | Yes | No | No | Yes | No | No | No | ||
Perforce P4Merge | Yes | No | No | Yes | Yes | Yes | |||
Pretty Diff | Yes | Yes | No | No | No | No | Yes | No | |
Tkdiff | Yes | No | No | No | No | No | |||
Total Commander (compare) | Yes | Yes | Yes | No | No | Yes | No | resync comparison | No |
vimdiff | Yes | Yes (via DirDiff plugin) | Yes | Yes | |||||
WinDiff | Yes | Yes | Yes | Yes | No | No | |||
WinMerge | Yes | Yes | Yes | Yes (via Options) | Yes | Yes | Yes | Yes | |
UCC | Yes | Yes | Yes | Yes | No | Yes | |||
Name | Show in-line changes | Directory comparison | Binary comparison | Moved lines | 3-way comparison | Merge | Structured comparison[25] | Manual compare alignment | Image compare |
API / editor features
Name | GUI | CLI | Scripting | Horizontal / vertical | Syntax highlighting | Reports |
---|---|---|---|---|---|---|
Beyond Compare | Yes | Yes | Yes | Both | Yes | XML, HTML, CSV, Text, Unix Patch |
Compare++ | Yes | Yes | Both | Yes | HTML, Text(combined or side-by-side) | |
diff | No | Yes | Horizontal | Yes pipe to diff-highlight[29] | ||
diff3 | No | Yes | Horizontal | |||
Eclipse (compare) | Yes | Vertical | Yes | |||
Ediff | Yes | Yes | elisp | Both | Yes | |
ExamDiff Pro | Yes | Yes | optional | Yes | UNIX, HTML, Diff | |
Far Manager (compare) | Yes | Yes | Yes | Yes | No | |
fc | No | Yes | Horizontal | |||
FileMerge (aka opendiff) | Yes | Yes | Vertical | Yes | No | |
Guiffy SureMerge | Yes | Yes | Java API | Both | Yes | HTML, Text, Unix Patch |
IntelliJ IDEA (compare) | Yes | Yes | Vertical | Yes | ||
jEdit JDiff plugin | Yes | Both | Yes | |||
Lazarus Diff | Yes | Yes | ||||
Meld | Yes | No | Yes | No | ||
Notepad++ (compare) | Yes | Yes | Both | Yes | No | |
Perforce P4Merge | Yes | Yes | Vertical | Yes | No | |
Pretty Diff | Yes | Yes | JavaScript | Both | Yes | XHTML |
Tkdiff | Yes | |||||
Total Commander (compare) | Yes | Both | No | No | ||
vimdiff | Yes | Yes | vim script | Both | Yes | HTML |
WinDiff | Yes | Yes | Horizontal | No | Text | |
WinMerge | Yes | Yes | Both | Yes | CSV, Tab-delimited, HTML, XML | |
UCC | Yes | Yes | Vertical | Yes | Text, CSV | |
Name | GUI | CLI | Scripting | Horizontal / vertical | Syntax highlighting | Reports |
Other features
Some other features which did not fit in previous table
Name | ZIP support | FTP support | SFTP support | Version control browsing | Patch creation | Patch application | Patch preview | Unicode support | XML-aware |
---|---|---|---|---|---|---|---|---|---|
Beyond Compare | Yes | Yes | Yes | SVN | Yes | Yes | Yes | Yes | |
Compare++ | SVN, CVS, Git, Microsoft TFS, Perforce, VSS using command line | Yes | |||||||
diff | No | No | No | Yes | Yes with patch | Yes with patch | No | No | |
diff3 | No | No | No | ||||||
Eclipse (compare) | Yes CVS, Subversion, Git, Mercurial, Baazar | Yes | |||||||
Ediff | Yes | Yes | RCS, CVS, SVN, Mercurial, git (anything supported by Emacs' VC-mode)[30] | Yes | Yes | Yes | |||
ExamDiff Pro | Yes[31] | Yes[32] | normal diff only | Yes | |||||
Far Manager (compare) | No | No | No | No | No | No | Yes | No | |
fc | No | No | No | ||||||
FileMerge (aka opendiff) | No | supported by OS | No | No | No | ||||
Guiffy SureMerge | Yes | Yes | Yes | Yes | Yes[33] | ||||
IntelliJ IDEA (compare) | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | |
jEdit JDiff plugin | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
Lazarus Diff | |||||||||
Meld | CVS, Subversion, Git, Mercurial, Baazar | Yes | Yes | ||||||
Notepad++ (compare) | No | Yes[34] | Git, Subversion (compare against base) | No | No | No | Yes | No | |
Perforce P4Merge | No | Yes | |||||||
Pretty Diff | No | No | No | No | No | No | No | Yes | Yes |
Tkdiff | No | No | CVS, RCS, Subversion | No | No | No | No | No | |
Total Commander (compare) | Yes | Yes | Yes | No | No | No | No | Yes | No |
vimdiff | Yes | Yes | Yes | Yes | |||||
WinDiff | No | No | No | No | |||||
WinMerge | Yes | No | Mercurial,[35] Subversion,[36] Visual Source Safe, Rational ClearCase[37] | Yes | Yes | ||||
UCC | Yes | No | Yes | ||||||
Name | ZIP support | FTP support | SFTP support | Version control browsing | Patch creation | Patch application | Patch preview | Unicode support | XML-aware |
Aspects
What aspects can be / are compared?
Name | Filename casing | CRC | Filedate | Daylight saving | Character casing |
---|---|---|---|---|---|
Beyond Compare | Yes | Yes | Yes | Yes | Yes |
Compare++ | Yes | Yes | Yes | Yes | |
diff | Yes | No | No | No | Optional |
diff3 | |||||
Eclipse (compare) | |||||
Ediff | |||||
ExamDiff Pro | No | Yes | Yes | Yes | Yes |
Far Manager (compare) | Yes | No | Yes | No | Yes |
fc | No | Optional | |||
FileMerge (aka opendiff) | No | No | No | Optional | |
Guiffy SureMerge | filesystem dependent | Yes | Yes | ||
IntelliJ IDEA (compare) | |||||
jEdit JDiff plugin | |||||
Lazarus Diff | |||||
Meld | |||||
Notepad++ (compare) | No | No | No | Yes | |
Perforce P4Merge | — | No | No | No | Yes |
Pretty Diff | — | No | No | No | Optional |
Tkdiff | |||||
Total Commander (compare) | Optional | Yes (in synchronize only) | Optional | ||
vimdiff | No | No | No | No | Yes |
WinDiff | No | No | when different | Yes | Optional |
WinMerge | No | No | Optional | Optional | |
UCC | No | No | Yes | No | |
Name | Filename casing | CRC | Filedate | Daylight saving | Character casing |
Time zone effects
When files are transferred across time zones and between Microsoft FAT and NTFS file systems, the timestamp displayed by the same file may change, so that identical files with different storage histories are deemed different by a comparer that requires the timestamps to match. The difference is an exact number of quarters of an hour up to 95 (same minutes modulo 15 and seconds) if the file was transported across zones; there is also a one-hour difference within a single zone caused by the transition between standard time and daylight saving time (DST). Some, but not all, file comparison and synchronisation software can be configured to ignore the DST and time-zone differences.[38] Software known to have daylight-saving compensation is marked in the Aspects table.
See also
- File comparison
- File synchronization
- Comparison of file synchronization software
- List of disk cloning software
- Comparison of disk cloning software
- Comparison of hex editors
References
- ^ Scooter Software
- ^ "Coode Software". Archived from the original on 2018-12-21. Retrieved 2020-12-13.
- ^ Compare++ Operating system information
- ^ Michael Kifer
- ^ Ediff requires a diff utility to function. As of December 2017, diff is not bundled with Emacs or Windows, so use of Ediff in a Windows environment requires installation of both Emacs and a diff implementation like GNU diff.
- ^ PrestoSoft
- ^ "Far2l". GitHub. 26 July 2022.
- ^ Microsoft
- ^ NeXT Product Marketing (Fall 1993). "What's New in Release 3.2?". NEXTSTEP in Focus. NeXT Computer, Inc. 3 (4). Retrieved 18 July 2014.
- ^ Guiffy Software
- ^ JetBrains
- ^ jedit.org
- ^ Stephen Kennedy
- ^ Meld/Windows
- ^ Notepad++ compare plugin
- ^ Pretty Diff
- ^ tkdiff
- ^ Christian Ghisler
- ^ Bare Bones Software, Inc.
- ^ vim license
- ^ Microsoft
- ^ Dean Grimm
- ^ a b WinMerge in Wine
- ^ "USC CSSE". Archived from the original on 2008-04-15. Retrieved 2010-12-14.
- ^ a b Compare logical sections (class, methods)
- ^ Examdiff
- ^ Examdiff
- ^ a b Visual Compare
- ^ "Git/Contrib/Diff-highlight at master · git/Git". GitHub.
- ^ gnu.org Support-for-Version-Control
- ^ through a plug-in
- ^ through a plug-in
- ^ UTF8, UTF16, MBCS, SJIS, over 150 file encoding and character set formats
- ^ Notepad++ FTP plugin
- ^ "tortoisehg / stable / wiki / FAQ —". Bitbucket.org. Archived from the original on 2010-07-15. Retrieved 2010-07-06.
- ^ "Using WinMerge with other tools – WinMerge 2.12 Manual". Winmerge.org. Archived from the original on 2010-07-10. Retrieved 2010-07-06.
- ^ "About". WinMerge. Archived from the original on 2010-07-03. Retrieved 2010-07-06.
- ^ Example: "Beyond Compare" help describes a user setting "timezone differences – ignores timestamp differences that are multiples of an exact hour."