在Mercurial中将一对文件作为一个文件进行管理

时间:2011-10-10 00:20:36

标签: mercurial diff mercurial-extension

我正在使用Mercurial中的小二进制文件posted

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

2 个答案:

答案 0 :(得分: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

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

答案 1 :(得分:0)

根据@Ryan的建议,我最后在diff程序之前使用了 small 批处理:

@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