WinMerge:Windows 平台开源文件与文件夹差异比较/合并工具
WinMerge 是自 2000 年起持续开发的开源 Windows 差异比较与合并工具,可并排比较两个或三个文本文件并逐行高亮差异,也能比较文件夹内容、选择性合并改动、生成补丁文件,并通过 7-Zip 支持直接比较压缩包内文件;同时提供语法高亮、忽略规则(空格/大小写/正则)与 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。贡献代码的流程:
- Fork WinMerge 仓库;
- 在自己的 Fork 上创建功能分支;
- 遵循现有代码风格(使用 Allman 缩进风格);
- 提交 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 整理如下。
一、准备环境
- 安装 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。
- 安装附加工具:git、Inno Setup 5.x 与 6.x、7-Zip、Python、Pandoc、MSYS2(其中需包含 po4a 与 diffutils)。
- 注意: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。