2009-06-05 62 views
3

我们需要将.dlls保存在我们的存储库中。我们的团队经常遇到.dll文件上的SVN冲突,这是非常烦人的。由于某些原因,即使.dlls的mime类型设置为application/octet-stream,svn仍然试图合并它们。如何防止Subversion合并二进制文件?

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

任何人都遇到过这个问题?

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

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

作为参考:我同时使用乌龟1.5.0和安克。

+0

没有答案,只是在您的环境中似乎违反了政策的重申:http://subversion.tigris.org/faq.html#binary-files – 2009-06-05 21:57:23

+2

你怎么能看到它试图合并它们?冲突并不能证明它试图合并它们 – 2009-06-05 22:01:10

+1

我只是假设他们正在尝试合并,因为有些更新不会导致冲突,有些则会导致冲突。我希望冲突停止 - 不确定冲突点是什么,如果你不能比较/合并 – Mario 2009-06-08 15:55:02

回答

3

要确保我理解正确的话,让我们来概括:

  • 你的二进制文件签入到SVN
  • 这些文件可以更改客户端和存储库中的
  • 每当都是改变,从资源库中的变化应该“双赢”

据我所知,svn的方式做到这一点是:

  • 执行“svn update --accept他们满”对整个本地副本的二进制文件
  • 运行常规“SVN更新”

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

+0

存储库中的文件永远不会更改,它们显然会从更新存储库中的该文件的客户端更改。由于它们是二进制文件(例如word文档或图表),它们不应该被合并,只是被替换。也许我描述了这个问题是错误的,但我希望能够做的就是让svn永远不会尝试合并,只获取二进制文件的最新版本 – Mario 2009-08-03 17:01:53

+0

这正是这个答案所描述的; - 接受他们的 - 完全丢弃任何本地变化时有传入的变化。这意味着如果你有一个修改过的Word文档,并且其他人改变了它,并且你svn更新 - 接受他们 - 完整版,你的版本就会丢失,并且用你同事的更新 – 2009-08-03 21:02:43

-1

这些dll文件,他们是从实际的项目建立输出?

如果是这样的话,他们不应该放在svn中。 Subversion应该包含源文件,并且构建服务器/开发包可以从那里构建dll。

+2

我宁愿将它保留在主题上 - 如何防止冲突的二进制文件 – Mario 2009-06-08 18:04:46

+0

当没有必要时,不进行版本化生成输出是防止冲突的二进制文件的好方法。 如果您的副本和服务器上的副本都发生更改,则无法防止发生冲突。 – 2009-06-08 21:41:20

1

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

如果您需要归档发布二进制文件(或类似文件),您应该在标签或发布分支上执行此操作,但不要在中继上执行此操作。

+0

标记源应该足以重新创建二进制文件。归档二进制文件不是源代码管理的任务。 – 2009-06-05 22:12:25

+0

虽然我完全同意这家公司/经理似乎有不同的想法。至少从我的经验,因此评论。 – bluebrother 2009-06-05 22:17:21

+1

您可能不想经常重新编译核心库。所以在这些情况下,我认为将sdn放入dll是有意义的。 – Ryu 2009-06-05 23:15:24

0

你确定它试图合并它们吗?这听起来更像是你正在发生冲突,因为Subversion不知道如何合并它们(你不希望它这样做)。

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

+1

由于它们是二进制文件,我希望svn来更新它们,就是这样。没有冲突,没有尝试合并 - 没有。只需将其替换为最新的。 – Mario 2009-06-05 22:23:35

+0

那么在这种情况下,您可能可以编写一个预先提交的钩子脚本来检查是否存在冲突,如果找到,就使用更新的文件解析它。 不幸的是,我从来没有写过钩子脚本,所以我不能在那里得到很多帮助。 – 2009-06-05 22:34:01

+0

预先提交的钩子脚本无法解决这个问题,因为这是一个服务器端脚本。在客户端进行更新时会发生冲突和合并。 – 2009-06-08 21:42:47

1

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

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

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

.CVSwrappers文件中,放入*.fileext -k b -m COPY。这告诉CVS在本地存储库中始终创建文件的备份副本,并在出现冲突时下载新版本。如此优雅。

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

相关问题