SVN坏文件*.r52*.v47

SVN坏文件*.r52*.v47,svn,labview,Svn,Labview,我的labview项目和SVN有问题。我的LV项目由2个cRIO(cRIO1和cRIO2)组成,它们在svn中共享相同的核心代码,并形成一个“公共”代码。发生了什么事?如果我在cRIO1中更改了某些内容并在SVN中提交,我会收到一条冲突消息,这似乎是由于存在具有相同扩展名的文件(.r52、.r47)。 我的SVN项目结构是(主干下): 在cRIO下,我拥有经典的LV项目结构 有人对LV、通用代码和SVN有经验?发生了什么? 不久前,您将工作副本更新为第47版。 您和其他人都修改了此文件,但另

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

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

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

发生了什么? 不久前,您将工作副本更新为第47版。 您和其他人都修改了此文件,但另一个人将此文件提交给SVN的速度更快

现在,您尝试更新到修订版52。SVN不知道如何处理这些更改,并将文件标记为冲突。它创建了一个
.r52
文件,这是来自SVN的文件,以及一个
.r47
文件,这是您刚才从SVN获得的文件

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

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

LabVIEW和版本控制 LV的版本控制很棘手。大多数文件都是二进制文件,很难将一个文件的两个版本(经过不同修改)合并到一个包含这两个版本的新版本中。
最大的问题是LV在修改文件方面臭名昭著,通常没有明显的原因。这会给您留下许多未编辑的文件,但这些文件已由LV修改,并希望提交给SVN。最后,您将一直有许多冲突,现在不知道哪些版本是正确的

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


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

第一步:如果可能,将版本控制系统更改为git。这个问题甚至可能不会出现在git中。我推荐GitKraken为git提供一个漂亮的GUI界面。同意@Adriankeester。您在此处遇到的问题-合并冲突的结果,因此您的文件会自动保存为不同的修订版本。来自Atlassian的SourceTree也是不错的git UI;我在LabView中使用过git,但这很不愉快。将编译后的代码与源代码分离是一个很好的建议。(我不知道为什么这不是默认值;它应该是必需的。)对于现有代码,可以很容易地使用VI服务器遍历项目,打开每个VI或CTL,设置ContainsCompiledCode=False,然后保存它。这将创建更多可怕的提交,但将避免未来的冲突。