在subversion中管理XML文档而忽略格式化

时间:2009-04-20 20:30:11

标签: xml svn formatting

我需要在Subversion中管理XML文档,但不想管理格式,这可能会因编辑文件的人而有所不同。

我看到两个解决方案: 在签入之前,每次使用已知格式设置文件格式。 或者给svn一个diff程序,主动解析diff算法的格式。最终,diff应该支持三向合并,主动忽略XML格式。

你推荐什么?

(相同的推理通常适用于代码源文件,但问题更加困难。)

4 个答案:

答案 0 :(得分:3)

我对这样的设置没有太多的个人经验。

对于第二种方法(自定义差异),我发现的是一个示例"API description for Netopeer repository library",它是使用Subversion进行设置的详细说明,其中包括xmldiff。< / p>

对于另一种方法,在存储Subversion之前转换为已知格式,我建议使用Canonical XML作为格式。例如,xmllint工具可以转换为以下格式:

% cat complique.xml
<?xml version="1.0" encoding="utf-8"?>
<toto   >
    <truc      a="1" >Machin &#x43; </truc >café</toto>

% xmllint --c14n complique.xml    
<toto>
    <truc a="1">Machin C </truc>café</toto>

要与Subversion集成,您可以在预提交中测试提交的文件是否等于规范文件。可能的此类脚本是my pre-commit using xmllint。有关示例,另请参阅the enforcer script

答案 1 :(得分:1)

您认为以下两个xml片段是否相同......?

片段1:

<foo xmlns="http://foo.com/foo">
    <bar>Hello</bar>
</foo>

Fragment2:

<ns1:foo xmlns:ns1="http://foo.com/foo">
    <ns1:bar>Hello</ns1:bar>
</ns1:foo>

...因为如果你这样做(因为这些片段具有相同的xml信息集),那么你需要考虑编写自己的差异工具。

答案 2 :(得分:0)

如果通过“格式化”表示“空白”,则可以配置svn diff以忽略-w命令中diff开关的空格:

$ svn diff -x -w [file]

有关详细信息,请参阅svn help diff

答案 3 :(得分:0)

让您的所有开发人员都在同一页面上。无论如何,他们都应该编码到相同的标准。如果您的编码人员都使用不同的格式标准,那么您需要解决更大的问题。