返回目录
开源项目文档办公类新手

WinMerge:Windows 平台开源文件与文件夹差异比较/合并工具

WinMerge 是自 2000 年起持续开发的开源 Windows 差异比较与合并工具,可并排比较两个或三个文本文件并逐行高亮差异,也能比较文件夹内容、选择性合并改动、生成补丁文件,并通过 7-Zip 支持直接比较压缩包内文件;同时提供语法高亮、忽略规则(空格/大小写/正则)与 Windows 资源管理器右键集成。适合需要跟踪改动、对照文件或目录版本、合并修改的开发者与文档处理者。

0 次阅读2026/09/10 发布
WinMerge:Windows 平台开源文件与文件夹差异比较/合并工具 来源图片

社区作者 · zZz

它解决什么问题

项目概览

WinMerge 是面向 Windows 的开源差异比较(differencing)与合并(merging)工具,自 2000 年起持续开发。它比较文件与文件夹,并以清晰的可视化文本格式呈现差异,便于阅读和处理。

配图 1 为项目 Logo(Docs/Logos/WinMerge_logo_24bit.png)。

功能能力

  • **文件比较**:并排比较两个或三个文本文件,逐行高亮差异;也支持显示行内差异。
  • **文件夹比较**:比较两个文件夹内容,查看哪些文件不同、缺失或只存在于一侧。文件夹比较支持高级过滤表达式,可按名称、路径、大小、时间戳等属性包含或排除文件与文件夹。
  • **合并**:通过在两侧之间选择性应用差异,合并文件或文件夹中的改动。
  • **语法高亮**:支持多种编程语言与文件格式的高亮,便于阅读与比较代码及结构化文本。
  • **补丁文件生成**:可生成 normal、context、unified diff 三种格式的补丁文件。
  • **灵活的忽略选项**:可忽略空白改动、大小写差异,或匹配正则表达式的行。
  • **资源管理器集成(Shell Integration)**:与 Windows 资源管理器集成,可通过右键上下文菜单直接发起比较。
  • **压缩包支持**:借助 7-Zip,可像普通文件夹一样比较多种压缩格式内部的文件。

总体而言,WinMerge 适合任何需要跟踪改动、比较文件或目录版本、高效合并修改的人。

参与贡献

如发现缺陷或希望提出功能需求,可提交 issue。贡献代码的流程:

  1. Fork WinMerge 仓库;
  1. 在自己的 Fork 上创建功能分支;
  1. 遵循现有代码风格(使用 Allman 缩进风格);
  1. 提交 Pull Request 并描述改动内容。

仓库目录结构

  • **ArchiveSupport/Merge7z**:连接 WinMerge 与 7-Zip 的 Merge7z DLL,是构建 WinMergeU.exe 所必需的;同时包含这些 DLL 的独立安装程序。
  • **Build**:编译期间生成的输出目录,包含可执行文件、库、手册等。
  • **BuildTmp**:编译期间生成的临时文件,可安全删除。
  • **ColorSchemes**:配色方案与主题。
  • **Docs**:用户与开发者文档;打开 Docs/index.html 可在本地浏览。
  • **Externals**:WinMerge 使用的第三方库(部分为定制版本)。
  • **Filters**:文件与文件夹过滤定义。
  • **Installer**:WinMerge 安装程序源码。
  • **Plugins**:运行时插件 DLL 与脚本。
  • **ShellExtension**:Windows 资源管理器 Shell 扩展,用于添加右键菜单项。
  • **Src**:WinMerge 主源代码。
  • **Testing**:测试文件与脚本,包含基于 Google Test Framework 的单元测试。
  • **Tools/Scripts**:各类开发实用脚本。
  • **Translation**:语言与翻译文件。

更新日志位置:Docs/Users/ChangeLog.md。

运行与调试

WinMerge 提供多个 Visual Studio 解决方案文件(.sln)用于构建与调试。运行任一 BuildAll 脚本后,可从以下路径启动:

Build\X64\Release\WinMergeU.exe

若为其他架构构建,请查看对应的输出目录。调试时也可以先正常启动 WinMerge,再用 Visual Studio 附加(attach)到运行中的进程。

构建环境要求

  • Visual Studio 2017(Community / Professional / Enterprise),VC++ 2017(v141)工具集,Visual C++ MFC 与 ATL,Windows 10 SDK,可选 Windows XP support for C++;
  • 或 Visual Studio 2022 及更高版本(Community / Professional / Enterprise),MSVC v143 或更新,Visual C++ MFC 与 ATL,Windows 10 SDK。

附加工具:git、Inno Setup 5.x 与 6.x、7-Zip、Python、Pandoc、MSYS2(含 po4a 与 diffutils)。

— 本文由 AI 根据公开来源辅助整理,命令、版本与许可证请在使用前到原始页面复核。

安装 / 开始使用

本项目为需要自行编译的 Windows 源码工程,构建流程按来源 README 整理如下。

一、准备环境

  1. 安装 Visual Studio,二者择一:
  • Visual Studio 2017(Community / Professional / Enterprise):需包含 VC++ 2017(v141)工具集、Visual C++ MFC 与 ATL、Windows 10 SDK;可选安装 Windows XP support for C++。
  • Visual Studio 2022 或更高版本(Community / Professional / Enterprise):需包含 MSVC v143 或更新版本、Visual C++ MFC 与 ATL、Windows 10 SDK。
  1. 安装附加工具:git、Inno Setup 5.x 与 6.x、7-Zip、Python、Pandoc、MSYS2(其中需包含 po4a 与 diffutils)。
  1. 注意:ArchiveSupport/Merge7z 中的 Merge7z DLL 是构建 WinMergeU.exe 的必要组件,仓库同时提供这些 DLL 的独立安装程序。

二、获取源码

按顺序执行:

代码
git clone --recurse-submodules https://github.com/WinMerge/winmerge
cd winmerge
DownloadDeps.cmd

注意必须使用 --recurse-submodules,否则子模块依赖不完整。

三、编译

代码
BuildAll.cmd [x86 | x64 | ARM64]
# 或
BuildAll.vs2022.cmd [x86 | x64 | ARM64]
# 或
BuildAll.vs2017.cmd [x86 | x64 | ARM64]

(原文中 vs2017 脚本标注的架构参数写作 [x86 | x64 | ARM | ARM64]。)

仓库同时提供多个 Visual Studio 解决方案文件(.sln),可用于构建与调试。

四、首次运行

运行任一 BuildAll 脚本后,可从以下路径启动程序:

代码
Build\X64\Release\WinMergeU.exe

若为其他架构构建,请到对应的输出目录中查找可执行文件。

五、调试方式

除通过 .sln 直接调试外,也可以先正常启动 WinMerge,再用 Visual Studio 附加(attach)到正在运行的进程。

六、常见问题

  • BuildTmp 是编译期间生成的临时文件目录,可安全删除,不影响源码。
  • 编译产物(可执行文件、库、手册等)位于 Build 输出目录。
  • 若构建失败,优先核对是否正确拉取子模块、是否正确安装 MFC/ATL 与 Windows 10 SDK,以及 Merge7z DLL 是否可用。
  • 本地文档可打开 Docs/index.html 浏览;更新日志见 Docs/Users/ChangeLog.md。

来源教程配图

logo
配图 1 · logo查看原图

适用场景

对比两到三个文本文件的逐行差异与行内差异
用于代码审阅与版本对照
比较两个文件夹
找出不同
缺失或仅存在于一侧的文件
在文件或文件夹之间选择性应用差异
完成合并
生成 normal
context
unified diff 格式的补丁文件
通过高级过滤表达式按名称
路径