SVN坏文件* .r52 * .v47

问题描述

我的labview项目和SVN有问题。我的LV项目由2个cRIO(cRIO1和cRIO2)组成,它们将相同的核心代码共享为svn中的“ common”。发生了什么?如果我在cRIO1中更改了某些内容并在SVN中提交,则由于存在具有相同扩展名( .r52, .r47)的文件,我收到一条冲突消息。 我的SVN项目结构为(主干):

enter image description here

在cRIO下,我拥有经典的LV项目结构

enter image description here

有人对LV,通用代码和SVN有经验吗?

解决方法

发生了什么事?

前一段时间,您将工作副本更新为修订版47。 您和其他人都修改了此文件,但是另一个人将文件提交到SVN的速度更快。

现在,您尝试对版本52进行更新。SVN不知道如何处理这些更改,并将文件标记为冲突。它会创建一个.r52文件(这是SVN的文件)和一个.r47文件,这是您前一段时间从SVN获得的文件。

如果文件是二进制文件,则原始文件就是更新之前的文件。 如果该文件是文本文件,则SVN将您的更改标记为您的更改,添加来自修订版52的更改,并将其标记为更改。也就是说,SVN会修改您的文件! 在.mine文件中找到尝试更新之前的文件内容。

如您所见,您可以手动编辑冲突,但也可以使用 resolve 函数使用SVN进行编辑。在tortoiseSVN中,右键单击目录,然后选择SVN->解决冲突。它会显示所有冲突,您可以选择是保留修改(我的)还是保留存储库中的修改(他们的)。 通常,SVN会在更新过程中列出冲突的文件,您可以选择要执行的操作。看来您没有这样做...

LabVIEW和版本控制

LV的版本控制很棘手。大多数文件都是二进制文件,并且很难将文件的两个版本进行不同的修改合并成包含两个版本的新版本。
最大的问题是LV在修改文件方面臭名昭著,通常没有明显的原因。这将为您留下许多您尚未编辑但已被LV修改并想要提交给SVN的文件。最后,您始终会遇到许多冲突,并且现在不要选择哪个版本是正确的...

您不能完全摆脱这个问题,但是可以通过将已编译的代码与VI分开来减少它。默认情况下,VI包含程序框图(源代码)以及已编译的二进制文件。也就是说,即使程序框图/前面板没有任何变化,但必须重新编译,文件也会被修改。通过分离已编译的代码,将其放入项目目录外部的缓存中。这也将文件大小减少了约30%。

LV中有一个全局设置,用于分隔新VI的已编译代码,每个VI的属性中都有一个复选框。不幸的是,没有一种自动的方法可以一次性完成整个项目。