如何防止Subversion合并二进制文件?

时间:2009-06-05 21:52:55

标签: svn version-control

我们需要在我们的存储库中保留.dll。我们的团队经常在.dll文件上遇到SVN冲突,这非常烦人。出于某种原因,即使.dll的mime类型设置为application / octet-stream,svn仍然试图合并它们。

从我发现的here(我发誓过去的方式)它说,只要mime类型不是文本,svn就不会尝试合并它们。但是看着我的dll告诉我svn也在合并我的应用程序/八位字节流文件(至少我假设SVN正在合并,不知道为什么没有合并会有冲突)。为什么hen会尝试合并二进制文件?这只是愚蠢......

有人遇到过这个问题吗?

我的目标是找到一个解决方案,允许二进制文件成为存储库的一部分,但绝不会发生冲突。我希望SVN只用最新的二进制代替,并称之为好。

请不要讨论为什么我应该或不应该将二进制文件放在存储库中 - 我必须也不想要冲突问题。

作为一个FYI:我同时使用Tortoise 1.5.0和Ankh。

5 个答案:

答案 0 :(得分:3)

为了确保我理解正确,让我们概括一下:

  • 您已将二进制文件签入svn
  • 这些文件可以在客户端和存储库中进行更改
  • 每当更改两者时,存储库中的更改都应为“win”

AFAIK,svn这样做的方法是:

  • 在二进制文件
  • 上运行'svn update --accept theirs-full'
  • 在整个本地副本上运行常规'svn update'

我不认为这可以在一个命令中完成,我也不认为它应该在一个命令中可行,因为第一个命令可能会丢失有价值的数据。

答案 1 :(得分:1)

如果在服务器和本地更改了文件,您显然会发生冲突。当然,更新工作副本包括更新二进制文件,因为它们是修订的一部分。这并不意味着svn尝试合并它们,但你肯定会遇到冲突。如果经常更改这些文件,我猜它们经常生成 - 甚至可能是编译器输出文件。这些文件根本不应该在存储库中。

如果您需要存档发布二进制文件(或类似文件),则应在标记或发布分支上执行此操作,但不应在主干上执行此操作。

答案 2 :(得分:1)

我们对某些文件存在同样的问题。

CVS很好地解决了这个问题,但不幸的是我的公司正在转向Subversion。

每次运行时,我们的应用都会修改某些配置文件,但是当开发人员检查新的更改时,我们希望它们始终覆盖用户存储库。

.CVSwrappers文件中,添加*.fileext -k b -m COPY。这告诉CVS始终在本地存储库中制作文件的备份副本,并在发生冲突时下载新版本。太优雅了。

没有SVN的等效设置。如果有人知道如何,请发布。

答案 3 :(得分:0)

你确定它正在尝试合并它们吗?这听起来更像是你遇到冲突,因为subversion不知道如何合并它们(你不想让它做任何事情)。

如果你有一个本地修改的dll并且有人在你做之前提交相同的dll,你到底想要发生什么?你期望发生什么?这显然是冲突,颠覆不知道你是否希望它使用你的dll或他们的dll。

答案 4 :(得分:-1)

这些dll文件是否构建了实际项目的输出?

如果是这种情况,则不应将它们放入svn中。 Subversion应该包含源文件,构建服务器/ dev框可以从那里构建dll。