gpt4 book ai didi

SVN:必须有祖先关系

转载 作者:行者123 更新时间:2023-12-04 22:12:58 39 4
gpt4 key购买 nike

当我使用第二个 SVN 合并选项,即“重新集成分支/自动合并”时,我收到了上面的错误消息。我明白为什么我会收到错误,即这是因为在创建分支时,我只是将项目从主干(使用 Repo-Browser)拖放到新分支中,而不是以下技术之一:

  • 在 Repo-Browser 中使用 Copy To 选项
  • 使用 Branch/Tag 选项(在 Windows 资源管理器中右键单击项目并选择 TortoiseSVN/Branch/Tag)

  • 我有三个问题:
  • 为什么项目必须具有祖先关系?这个问题表明,如果选择此选项,SVN 只会进行文件比较: What are the differences between merging a range of revisions vs. reintegrate in SVN?
  • 上面的两个选项是否都使项目与祖先相关?
  • 项目从 Trunk 到 Branch 的简单拖放是否会使项目与祖先无关?
  • 最佳答案

    Why do the projects have to be ancestrally related? This question suggests that SVN simply does a file comparison if this option is selected: SVN Merge a range of revisions vs. reintegrate.



    合并不仅仅是将文件更改从一个分支复制到另一个分支,而是将最后一个共同祖先与被合并的两个文件进行比较。这是一个三路合并。

    假设您在主干上有一个文件:
    Line #1
    Line #2
    Line #3
    Line #4

    你创建了这个文件的一个分支。

    在分支上,您将第 4 行更改为:
    Line #1
    Line #2
    Line #3
    Line #4 FOO FOO FOO

    在主干上,您将第 3 行更改为
    Line #1
    Line #2
    Line #3 BAR BAR BAR
    Line #4

    Subversion 将最后一个共同祖先(任何更改之前的文件版本)与您正在合并的文件版本进行比较。如果我将主干合并到分支,Subversion 会看到我更改了主干上的第 3 行,而不是第 4 行。因此,#3 行的更改需要带过来,但#4 行的差异是分支更改的结果,我不应该从主干复制#4 行

    合并后的文件如下所示:
    Line #1
    Line #2
    Line #3 BAR BAR BAR
    Line #4 FOO FOO FOO

    Subversion 还会考虑先前合并的更改以及您要跳过的更改。它实际上是一个非常好的合并工具,除非您开始重命名文件并批量移动它们。 (这应该在 Subversion 1.9 中得到纠正)。

    因此,为了使合并工作,两个文件 必须 共享可用作合并基础的共同祖先。没有它,Subversion 将无法区分文件的哪些行在主干上发生了更改,而在分支上发生了哪些更改。否则,它只是将文件从一个分支复制到另一个分支。

    你可以试试 --ignore-ancestry 参数。这会导致 Subversion 将合并视为差异。

    Do both options above make the project ancestrally related?



    这两个选项(我认为您正在考虑 --reintegrate 与没有此选项的情况)都不会使项目与祖先相关。这来自通过 svn cp 制作分支。 --reintegrate vs. w/o reintegrate 与合并必须发生的方式有关。当您从基本流(通常是主干)合并到分支流时,您将基本流上发生的更改合并到分支流上。这会创建新的修订。当您合并回来时,Subversion 会看到新的修订版本,并希望将这些修订版本合并回您的基本流中,重新集成选项可以避免这种情况发生。

    而且,当您重新集成时,您会在基本流上创建一个新版本,这就是为什么您不应该在使用 --reintegrate 后从分支流合并回基本流的原因。您可以通过在 --record-only 之后立即从分支流到基本流进行 --reintegrate 合并来克服这个问题。

    Does a simple drag and drop of the project from Trunk to Branch make the project none ancestrally related?



    取决于 Subversion 客户端。一些 GUI Subversion 客户端将拖放理解为 svn cp,而不仅仅是将文件复制到另一个目录。但是,TortoiseSVN 通过 Windows 资源管理器工作,因此默认情况下拖放是文件系统副本。当您右键单击拖放以执行 svn cp 而不是 Windows 文件系统副本时,有一个选项。

    关于SVN:必须有祖先关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18450435/

    39 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com