【问题标题】:Extending a version control system with custom delta algorithm使用自定义 delta 算法扩展版本控制系统
【发布时间】:2011-03-17 10:55:40
【问题描述】:

哪些成熟的版本控制系统允许覆盖查找和应用 delta 的算法?无论是通过插件还是通过外部工具,都没有关系。

必须可以为特定文件类型覆盖 VCS 的内部差异算法。自定义增量必须存储在存储库中以供增量应用算法使用。

在我的情况下,内部二进制差异是不可接受的。

我的意思是完全覆盖算法,而不是使用自定义差异程序显示差异。

【问题讨论】:

  • 我感觉您的要求过于具体。像这样“必须将自定义增量存储在存储库中” 的措辞会立即排除不存储增量的 VCS-es。 -- IOW:你怎么还不确定你将使用哪个 VCS,却又知道你需要重写算法?是否有任何理由假设某个 VCS 会与您的特定文件类型行为不端?如果您需要访问特定的增量,您可以从您的树中生成它们(例如,在 git 中有一个预提交挂钩或按使用文件属性)
  • “自定义增量必须存储在存储库中……” – Git 不会将增量存储在存储库中,而是完整的文件。它仅将增量用于网络通信和补丁(显然,出于兼容性原因,这些都是通用补丁格式)。因此,无需更改 Git 中的内部 delta 算法。您可以以这种方式更改 difftool,以便 git diff 为特定文件类型调用自定义 difftool。
  • 戳,好的,那么我们需要覆盖客户端和服务器端的比较算法。我想 difftool 仅用作向用户表示增量的一种方式,而不是用于生成补丁。
  • @utapyngo 你有没有设法得到任何可接受的解决方案?我正在寻找构建结果的版本控制,比如可执行文件等。但我发现它实际上是一个更复杂的问题,因为 .zip 和各种档案也需要正确版本控制,因此需要自定义差异无论如何。
  • @AndreyTch.: 不,我只是使用了自定义差异和合并程序。

标签: svn git version-control mercurial bazaar


【解决方案1】:

对于服务器端: 据我所知(我不是这个主题的专家!)这并不容易。因此,您最好从 Apache Subversion 获取源代码并根据您的需要对其进行修改/扩展。看看“Pre-Commit Hooks”也是一个想法。

对于客户端: ClearCase 有一些不错的额外合并工具,例如办公文件。 也可以更改 Tortoise SVN 客户端中的 diff/merge 工具。

【讨论】:

  • 文件比较在客户端完成,只有增量发送到服务器。所以必须在客户端完成。
  • 当你在svn客户端定义自定义diff/merge工具时,svn会在提交和更新时使用它来查找差异吗?还是只是为了向用户显示差异? 'svn commit' 命令似乎没有 --diff-cmd 参数。
【解决方案2】:

git 的情况下,我不知道有什么简单的方法可以覆盖计算用于在包文件中有效存储的二进制增量的方法。 (打包文件是使用大多数传输方式生成的,以便在服务器之间有效地传输数据。)

不过,您可能想看看bup git 项目。对于使用 git 备份海量数据的情况,这里采取了直接生成 git pack 文件的方式。这听起来与您想要做的大体相似。

[我知道您在问题中明确排除了这一点,但如果其他读者发现此问题对二进制文件的用户可见差异感兴趣,我会指出this useful example from Pro Git。]

【讨论】:

    【解决方案3】:

    您绝对可以为 Bazaar 编写提供自定义合并算法的插件: http://doc.bazaar.canonical.com/development/en/user-guide/hooks.html#example-a-merge-plugin http://doc.bazaar.canonical.com/development/en/user-reference/hooks-help.html#merge-file-content

    快速浏览后,我没有看到类似的东西用于做差异,但我相信添加类似的东西不会那么难。我知道有像 bzr-tools 这样的插件可以提供替代的差异输出(cdiff 用某种颜色打印差异)。

    【讨论】:

      猜你喜欢
      • 2018-10-14
      • 2010-09-05
      • 1970-01-01
      • 2010-10-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多