Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Svn 如何防止Subversion合并二进制文件?_Svn_Version Control - Fatal编程技术网

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

Svn 如何防止Subversion合并二进制文件?,svn,version-control,Svn,Version Control,我们需要在存储库中保留.dll。我们的团队在.dll文件上经常遇到SVN冲突,这非常烦人。出于某种原因,即使将.dll的mime类型设置为application/octet stream,svn仍在尝试合并它们 从我的发现(我发誓事情过去是这样)可以看出,只要mime类型不是文本,svn就不会尝试合并它们。但是看一下我的DLL,我知道svn也在合并我的应用程序/八位字节流文件(至少我假设svn正在合并,不知道为什么没有合并会有冲突)。为什么svn会尝试合并一个二进制文件?这太愚蠢了 有人遇到过这

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

从我的发现(我发誓事情过去是这样)可以看出,只要mime类型不是文本,svn就不会尝试合并它们。但是看一下我的DLL,我知道svn也在合并我的应用程序/八位字节流文件(至少我假设svn正在合并,不知道为什么没有合并会有冲突)。为什么svn会尝试合并一个二进制文件?这太愚蠢了

有人遇到过这个问题吗

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

请不要讨论我为什么应该或不应该将二进制文件放入存储库中-我必须而且不希望出现冲突问题


仅供参考:我同时使用Ortoise 1.5.0和Ankh。

这些dll文件,它们是从实际项目生成的输出吗


如果是这样的话,他们根本不应该被放在svn里。Subversion应该包含源文件,而build server/dev box可以从中构建DLL。

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


如果您需要归档发行版二进制文件(或类似文件),您应该在标记或发行版分支上执行此操作,而不是在主干上执行此操作。

您确定它正在尝试合并它们吗?这听起来更像是您遇到了冲突,因为subversion不知道如何合并它们(您无论如何都不希望它这样做)


如果您有一个本地修改的dll,并且有人在您之前提交了相同的dll,那么您希望发生什么?你预计会发生什么?这显然是一个冲突,subversion不知道您是否希望它使用您的dll或其dll。

为了确保我正确理解您的意思,让我们重述一下:

  • 您已将二进制文件签入svn
  • 这些文件可以更改客户端和存储库中的文件
  • 无论何时两者都发生更改,存储库中的更改都应该“成功”
好吧,svn的方法是:

  • 在二进制文件上运行“svn更新--接受它们的完整”
  • 对整个本地副本运行常规“svn更新”

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

我们在某些文件中也有同样的问题

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

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

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


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

不是回答,只是重申一下在您的环境中似乎违反的政策:您怎么能看到它试图合并它们?冲突并不是它试图合并它们的证据我只是假设它们正在尝试合并,因为有些更新不会导致冲突,有些则会。我希望冲突停止——如果你不能比较/合并,我不知道冲突的意义是什么。谢谢你给我指出了这个政策。在我发布之前,我就发现了这一点,它并没有说任何关于冲突二进制文件的内容。有一个提交钩子,它阻止签入没有锁定的二进制文件。svn:lock将告诉AnkhSVN自动锁定二进制文件。作为一个副作用,如果您锁定了一个文件,其他人将无法在不签出该文件的情况下修改和签入该二进制文件。同时,您已将其签出。与源安全或TFS非常相似。但是如果需要的话你可以偷锁。标记源代码应该足以重新创建二进制文件。归档二进制文件不是源代码管理的任务。虽然我完全同意这一点,但公司/经理的想法似乎有所不同。至少从我的经验来看,你可能不想经常重新编译核心库。因此,在这些情况下,我认为在svn中放置DLL是有意义的。这并不能回答我的问题-我需要在svn中放置二进制文件,而无需制作标记或主干。这也不能解释为什么有时它们不会冲突,只是被替换,但有时它们会冲突。还有什么想法吗?也许你们应该解释一下为什么你们需要把二进制文件放到主干中。这样,就有可能为您的问题找到其他解决方案。如果您经常与二进制文件发生冲突,您的存储模型似乎不适合您的问题。至于另一个问题:如果没有冲突(即两个文件在二进制级别上是相同的),它们将被替换。如果重建dll,结果与svn中的文件完全相同,则在svn中更新文件时不会发生冲突(因为它仅在一个位置更改)。因为它们是二进制文件,所以我希望svn更新它们,仅此而已。没有冲突,没有尝试合并-什么都没有。只要用最新的替换它,那么你就可以编写一个预提交钩子了