代码之家  ›  专栏  ›  技术社区  ›  dierre

为什么这是一个SVN冲突的颠覆?

  •  2
  • dierre  · 技术社区  · 14 年前

    我正在编写一个桌面应用程序,它必须同时在Linux和Windows上工作,因为在Windows上,我需要使用JNI来实现一个功能。但这不是问题所在。 我有一个Windows和一个Eclipse IDE的Linux安装,我使用Subversive提交到我的存储库。 在Windows提交之后,我开始在Linux上工作以实现Linux实现,但我发现自己遇到了一个冲突:

    .classpath[工作]

    <?xml version="1.0" encoding="UTF-8"?>
    <classpath>
        <classpathentry kind="src" path="src"/>
        <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>
        <classpathentry kind="lib" path="lib/sqlitejdbc-v056.jar"/>
        <classpathentry kind="output" path="bin"/>
    </classpath>
    

    .classpath[存储库]

    <?xml version="1.0" encoding="UTF-8"?>
    <classpath>
        <classpathentry kind="src" path="src"/>
        <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>
        <classpathentry kind="lib" path="lib/sqlitejdbc-v056.jar">
            <attributes>
                <attribute name="org.eclipse.jdt.launching.CLASSPATH_ATTR_LIBRARY_PATH_ENTRY" value="QuickBackup/bin"/>
            </attributes>
        </classpathentry>
        <classpathentry kind="output" path="bin"/>
    </classpath>
    

    正如你所看到的,冲突发生在 <attribute>...</attribute> 用于告诉jvm我的dll模块在哪里与jni一起使用的部分。为什么?不颠覆就更新工作版本吗?

    2 回复  |  直到 14 年前
        1
  •  2
  •   vonPetrushev    14 年前

    你有两个不同性质的问题。首先,如果您使用rev 156修改来自工作副本的文件,则会产生svn冲突,但同时,来自其他人工作副本的该文件被提交到rev 157。更新文件时,可能会出现两种情况:

    • 合并(G):意味着您和您的同事正在处理文件,但在不同的位置,因此'diff'实用程序认为合并它是可以的。
    • 冲突(C):“diff”实用程序确定您和您同事的更改都不兼容,因此您需要(仅)解决工作副本上的差异

    第二个问题是ini(或conf)文件不是部署不可知的。我的意思是,在部署代码的每台机器上,这个文件应该是不同的。在这种情况下(我认为这是您的情况),您需要将svn:ignore属性放在它上面,并记住创建这个文件,并将它的细节放在每个部署上。

    http://svnbook.red-bean.com/en/1.1/ch07s02.html#svn-ch-7-sect-2.3.3

        2
  •  0
  •   Falmarri    14 年前

    有时版本控制系统就是不知道如何处理更改。我有很多原因。但是确定如何在这样的存储库中合并更改并不是一件小事。