Android Studio - 无法从 SVN 分支合并

Android Studio - unable to merge from SVN branch

我们决定遵循为我们添加到移动应用程序的每个新功能创建一个新 SVN 分支的过程。这背后的最终目标是保留每个代码更改的历史记录(当我们手动将项目文件夹复制到 SVN 而不是创建和合并分支时,这不会发生)。

我的问题是到目前为止我无法将更改从一个分支合并到另一个分支。

我已经参考了以下帖子但没有成功:

这是我到目前为止尝试过的:

我有两个功能分支,如下所示 Tortoise SVN:

我想将分支 Feature_A3 中的更改合并到分支 Feature_A2 中。为此,我在 Android Studio 的 A2 工作副本的 VCS 中使用 Merge from 选项:

然后它要求我select要从(A3)合并的分支或配置其他分支:

我点击配置分支,只是为了向您展示现有的分支配置:

如您所见,A2 是 Trunk,A3 是 Branch这是正确的吗?

然后它问我要将A3 的哪一部分合并到A2 中。我 select /src 目录(存在相关更改的地方):

然后它慷慨地给了我三种不同的方式来执行合并操作:

我select第三个选项,因为它直接给了我需要合并的更改:

我点击合并所选BAM!!!我每次都收到这个错误:

不知道 "unresolved conflicts" 或 "skipped items" 是什么。为什么会出现此错误,我应该如何将 A3 中的更改合并到 A2 中???有人可以帮忙吗?所有答案将不胜感激。谢谢...

我一直在关注官方的 Intellij IDE下面的文档:

请注意:

答案...

感谢 Peter Parker and especially Yoav Aharoni 的宝贵反馈。正如 Yoav 正确指出的那样,这确实是指定分支位置文件夹的方式。它需要是包含分支的文件夹,而不是分支文件夹本身:正如 Peter 所说的那样,检查 "Include merged revisions" 会显示合并的历史记录。我现在可以从 IDE 内部合并,并在 TortoiseSVN 中查看合并历史。 没有命令行! 太棒了!!!

然而,最后一个问题是我无法在 Android Studio (Intellij IDEA) 中查看合并的历史记录,如 Viewing Merge Sources 中所述。有谁知道如何在 Android Studio 中实现这一点?

我不是 SVN 专家,但我认为您需要更改目录结构。我相信即使这只是一个约定,svn 也使用目录结构来合并分支。所以你的目录结构应该是:

SVN
   /Android
      /branches
         /production
         /featureA2
         /featureA3
      /tags 
      /trunk
  /IOS
      /branches
         /production
         /featureA2
         /featureA3
      /tags 
      /trunk

尽管 TortoiseSVN 回购浏览器允许您移动目录,但每个目录中都存储了大量元数据并用于处理合并过程,因此您可能不得不重新启动回购.有关如何设置存储库的更多详细信息,请参阅 subversion best practices guide and strategories for repository layout。综上所述,我会犹豫是否依赖 Android Studio 的 svn 集成来完成繁重的工作,比如合并分支,因为(尽管 JetBrains 工具中的大多数东西都很棒)它对 SVN 的处理还有很多不足之处。

呸,好久没用过SVN了...:)

但根据我的记忆 Branch locations 应该是文件夹 包含 您的分支文件夹(而不是每个单独的分支文件夹)。

您看,通常 SVN 存储库遵循标准的命名约定和文件夹结构:

trunk/
branches/
  Feature_A2/
  Feature_A3/
tags/
  v1.01/
  v1.02/

and so on...

trunk 是主要开发发生的地方,branches 是针对功能、长期或有风险的项目,或不同阶段(例如 QA 和预生产)。

因此,据我所知,Android Studio 希望您将 Branch locations 设置为 branches 文件夹。在你的情况下,我认为它应该是 http://192.168.0.64/svn/.../Android/Feature

此外,您的 trunk 不是 Feature_A2 - Feature_A2 只是另一个分支。
虽然我看不到内容,但我认为http://192.168.0.64/svn/.../Android/Development可能是你的后备箱。

这不应该打扰你,因为你不必合并到你的主干,你也可以在分支之间合并(例如合并 Feature_A3 到 Feature_A2)。

所以,回顾一下:

  1. 虽然不是强制性的,但我建议重命名您的文件夹以符合约定(您可以通过右键单击 Tortoise SVN 轻松完成,但只有在所有队友提交之后,否则合并对他们来说将是一个地狱)。
  2. 尝试将 Branch locations 设置为 http://192.168.0.64/svn/.../Android/Feature
  3. Trunkhttp://192.168.0.64/svn/.../Android/Development(仅当它确实包含来源时,类似于Feature_A2/3)
  4. 考虑 "tagging" 你在 tags 文件夹中的发布(它几乎只是将 trunk/branch 文件夹复制到标签,但你有一个命令) .

    如果这样做,您还可以将 tags 文件夹添加到 Branch locations,这样您就可以将当前源与任何以前的版本进行比较(这很方便)。

P.S:"unresolved conflicts" error 也可能意味着您有未解决的冲突(duh :))。当您和队友更改文件中的相同行(或者如果他删除了您更改的文件)并且您更新以获取他的更改时,通常会产生冲突。

在您手动解决这些问题之前,SVN 不会让您合并 conflicts/changes。

您可以在底部的 Version Control 选项卡中找到冲突,它们将被标记为红色。
(但我不认为这是你的问题)


让我知道这是否适合您!