分步将 xlCompare 集成到 GIT

下面是一套将您的 git 仓库与 xlCompare 应用连接起来的简单流程。xlCompare 拥有一组标准的命令行参数(CLI),与差异查看器及合并工具通用,因此您几乎可以将它集成到任何版本控制应用中。

第 1 步——在电脑上安装 xlCompare

访问下载页面,或使用直达下载链接 https://xlCompare.com/xlcompare-12-04.msi。将安装文件保存到电脑并运行以安装 xlCompare。

下文将用到 xlCompare 在您电脑上的安装路径。默认情况下,xlCompare 安装到以下文件夹:

C:/Users/{User Name}/AppData/Local/Spreadsheet Tools/xlCompare

但如果您安装到了其他位置(例如 D:\xlCompare),则需相应修改。

第 2 步——编辑 .git/config 文件

在您仓库的 .git/config 文件中加入以下内容:

[diff "xlcompare"]
    command = 'C:/Users/{User Name}/AppData/Local/Spreadsheet Tools/xlCompare/exceldiff.cmd'

[merge "xlcompare"]
    name = xlCompare
    driver = 'C:/Users/{User Name}/AppData/Local/Spreadsheet Tools/xlCompare/excelmerge.cmd' %A %O %B

[mergetool "xlcompare"]
    cmd = 'C:/Users/{User Name}/AppData/Local/Spreadsheet Tools/xlCompare/excelmerge.cmd' "$LOCAL" "$BASE" "$REMOTE" "$MERGED"
    trustExitCode = false

重要:

xlCompare 文件夹的路径包含空格字符,因此我们用单引号将其包裹。如果遗漏这些引号,您会在 Git 控制台中收到错误信息。

%A %O %B 是 GIT 用于合并工具的命令行参数:

  • %A —— Excel 文件的 LOCAL(本地)版本
  • %O —— Excel 文件的 BASE(共同)版本
  • %B —— Excel 文件的 REMOTE(远程)版本

为什么合并有两行?

第一行(merge)将 xlCompare 设为自动合并操作的驱动,用于在更新本地仓库文件时使用。第二行(mergetool)允许通过命令 git mergetool --tool=xlcompare -y --no-prompt {file path} 使用 xlCompare。

trustExitCode 设为 false 时,由您来判断合并是否成功;不过在合并模式下,xlCompare 会以退出码返回冲突数量,因此如有需要,您可将此参数设为 true。

第 3 步——在 git 中将 Excel 文件与 xlCompare 关联

这是本指南的最后一步。在仓库根目录创建 .gitattributes 文件(它可能已存在),在文件末尾加入以下内容:

*.xlsx diff=xlcompare
*.xlsx merge=xlcompare

它会告诉 git:在需要差异查看器或合并工具时,对 Excel 文件使用 xlCompare。

开始用 git diff 命令配合 xlCompare!

就这样,您已将 xlCompare 与 git 仓库中的 Excel 文件连接起来。现在 git diff 命令会通过打开带差异报告的 xlCompare 来显示 2 个 XLSX 文件的差异。

如何集成到 SourceTree 等 GUI 工具?

如果您的版本控制应用允许为 Excel 文件的差异与合并操作设置 GUI 工具,请使用以下设置。

差异工具

将 xlCompare 的路径用作工具,默认为:

'C:/Users/{User Name}/AppData/Local/Spreadsheet Tools/xlCompare/exceldiff-source-tree.cmd'

合并工具

将 xlCompare 的路径用作工具,默认为:

'C:/Users/{User Name}/AppData/Local/Spreadsheet Tools/xlCompare/excelmerge.cmd'

命令行开关如下:

"$LOCAL" "$BASE" "$REMOTE" "$MERGED"

如果版本控制应用没有 $MERGED 参数怎么办?将它从命令行中移除,使用以下语法:

"$LOCAL" "$BASE" "$REMOTE"

重要

上面命令行开关中我们使用了 $LOCAL、$BASE 与 $REMOTE 名称,您可能需要将它们替换为版本控制应用所使用的相应名称。

注意

命令文件 exceldiff-source-tree.cmd 与 excelmerge.cmd 已包含在 xlCompare 安装包中,它们就在您电脑上的 xlCompare 安装文件夹内。

问答

本节介绍一些关于 git 集成 的常见问题。如果您在将 xlCompare 用作 Excel 文件的差异查看器或合并工具时需要帮助,请联系我们,我们很乐意提供协助。

为什么我们用 CMD 文件作为差异与合并工具的驱动?

如果您的版本控制系统要求差异或合并工具为控制台应用,就需要使用这种方式。xlCompare 本身是 GUI 应用,在要求控制台工具时并不总能工作。这种情况下,您可以使用我们的驱动,或为您的版本控制应用创建类似的驱动。

CMD 文件里有什么

exceldiff.cmd:

"%~dp0xlCompare.exe" %5 %2 -quit_on_close -titleMine:LOCAL -titleBase:REMOTE -rep:"%__CD__%"
  • "%~dp0xlCompare.exe" —— 当前目录中 xlCompare 应用的路径
  • %5 —— Excel 文件的 LOCAL 版本(git 使用 7 个参数,第 5 个为本地文件)
  • %2 —— Excel 文件的 REMOTE 版本
  • quit_on_close —— 关闭对比后 xlCompare 自动退出,省去点击关闭按钮的时间
  • titleMine:LOCAL —— Git 使用临时文件名,LOCAL 与 REMOTE 能清晰标识文件
  • rep:"%__CD__%" —— 仓库路径,这是非常重要的开关,应放在最后;缺少此参数将无法打开子文件夹中的文件

excelmerge.cmd:

"%~dp0xlCompare.exe" -merge -titleMine:LOCAL -titleBase:BASE -titleTheir:REMOTE "%1" "%2" "%3" -output:"%4" -rep:"%__CD__%"
  • "%~dp0xlCompare.exe" —— 当前目录中 xlCompare 应用的路径
  • merge —— 对传入文件执行合并操作,若有冲突则打开 GUI 窗口
  • titleMine:LOCAL —— Git 使用临时文件名,LOCAL 与 REMOTE 能清晰标识文件
  • "%1" "%2" "%3" —— Excel 文件的本地、基准与远程版本路径
  • output:"%4" —— 当以 mergetool 命令调用 xlCompare 时,此开关让 xlCompare 将结果保存到 $MERGED 路径(在上述 mergetool 语法中作为第 4 个参数传入)
  • rep:"%__CD__%" —— 仓库路径,应作为最后一个开关;缺少它将无法打开子文件夹中的文件

如您所见,CMD 文件的内容很简单,您可以通过添加 CONFIG 开关来修改它们,或为 GIT 创建自己的 CMD 包装脚本。

将 xlCompare 与 GIT 等工具配合使用是否需要授权?

XLSX 与 XML 文件:将 xlCompare 用作 XLSX 与 XML 文件的差异或合并工具,需要 xlCompare 专业版授权。

文本文件:对于文本文件,您无需 xlCompare 授权,可免费将 xlCompare 用于文本文件。

下载 xlCompare 桌面版,将其接入您的版本控制流程。

下载试用