0

我正在使用 Mercurial 中发布的小型二进制文件。

这个二进制文件可以作为文本转储以在版本之间进行差异,但问题是文件成对出现(例如:Form.scx / Form.sct),我找不到告诉 Mercurial “制作快照”(复制到临时位置)当我执行hg ediff.

4

2 回答 2

1

只需制作一个快速脚本并将其设置为 extdiff 的工具。我猜你在 Windows 上,但无论与此等效的 powershell 是什么:

#!/bin/sh
binary-to-text $1 /tmp/$1.sct
binary-to-text $2 /tmp/$2.sct
diff /tmp/$1.sct /tmp/$2.sct
rm /tmp/$1.sct /tmp/$2.sct

这将创建、比较然后删除文本版本。你要小心不要覆盖,处理多个并发调用等。

然后配置一个新命令来运行你的脚本:

[extdiff]
cmd.mydiff = that_script_above.sh

然后您可以执行以下操作:

hg mydiff

理想情况下,您的存储库中只有“源”bonary 格式,而不是文本格式,因为您不应该将生成的项目保留在存储库中——因为如果您更新一个而不是另一个,则您的状态不一致。按需生成可比较的文本文件是一种更好的方法。

于 2011-10-10T03:44:16.130 回答
0

正如@Ryan 所建议的,我在 diff 程序之前得到了一小批:

@echo off
set f1=%1
set f2=%2
::Temporary dir created by hg to copy the snapshot file
set tdir=%~dp1
::Original repository dir
set repo=%~dp2
::Filename extension
set ext=%~x1
::The binary files comes in pairs: scx/sct \ vcx/vct ...
set ex2=%ext:~0,-1%t

::Check if "dumpable" extension
echo %ext% | grep -iE "(vcx|vct|scx|sct|pjx|pjt|frx|frt)" > nul && goto DumpFile
goto diff

:DumpFile
set f1="%tdir%\_Dump1.prg"
set f2="%tdir%\_Dump2.prg"
::Get the pair file from the repository
hg cat %repo%\%~n1%ex2% -o "%~dpn1%ex2%" -R %repo%

::Do the dump, then the diff
MyDumpProgram.exe %1 %f1%
MyDumpProgram.exe %2 %f2%
goto diff

:diff
ExamDiff.exe %f1% %f2%
pause

然后在 %UserProfile%\.hgrc 中配置批处理

[extdiff]
cmd.ediff = d:\Utiles\diff2.bat
于 2011-10-10T14:23:50.933 回答