Android Studio – 无法从SVN分支合并

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

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

我已经提到以下post但没有成功:

  • 如何在android studio中使用SVN将分支与trunk合并

  • Android Studio更新项目:Merge vs Rebase vs Branch Default

  • 如何使用Android studio将分支合并到SVN

  • 如何在Android Studio 2.0中将特定的svn修订从分支合并到主干

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

我有两个function分支,如下面Tortoise SVN中所示 :

在此处输入图像描述

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

在此处输入图像描述

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

在此处输入图像描述

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

在此处输入图像描述

如您所见,A2是Trunk ,A3是分支它是否正确?

然后它问我想要合并到A2的A3部分。 我选择/src目录(存在相关更改的位置):

在此处输入图像描述

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

在此处输入图像描述

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

在此处输入图像描述

我点击Merge SelectedBAM! 我每次都会收到此错误:

在此处输入图像描述

关于“未解决的冲突”或“跳过的项目”是什么,没有任何线索。 为什么我会收到此错误,如何将A3中的更改合并到A2中? 有人可以帮忙吗? 所有答案将不胜感激。 谢谢 …

我一直在关注以下官方的Intellij IDEA文档:

  • 将更改集成到特征分支/从特征分支集成

  • 合并,删除和比较分支

请注意:

  • 目前我使用的是Subversion,而不是Git。

  • 我本地工作副本的目录结构与SVN repos的目录结构不完全相同。 这可能是错误的原因吗?

答案 …

感谢Peter Parker ,尤其是Yoav Aharoni的宝贵意见。 正如Yoav正确指出的那样,确实是指定分支位置文件夹的方式。 它需要是包含分支的文件夹,而不是分支文件夹本身:正如Peter正确地说的那样,选中“Include merged revisions”会显示合并的历史记录。 我现在能够从IDE本身合并,并在TortoiseSVN中查看合并的历史记录。 没有命令行! 好极了!!!

但是,最后一个问题是我无法在Android Studio(Intellij IDEA)中查看合并历史记录,如查看合并源中所述 。 有谁知道如何在Android Studio中实现这一目标?

Phew,有一段时间没有使用SVN …… 🙂

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

你看,通常SVN repo遵循标准的命名约定和文件夹结构:

 trunk/ branches/ Feature_A2/ Feature_A3/ tags/ v1.01/ v1.02/ and so on... 

trunk是主要发展的地方, branches是特征,长期或风险项目,或不同阶段(如质量保证和预先产品)。

所以,据我记忆,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轻松完成,但只有在所有队友提交之后,否则合并将成为他们的HELL)。
  2. 尝试将Branch locations设置为http://192.168.0.64/svn/.../Android/Feature
  3. Trunkhttp://192.168.0.64/svn/.../Android/Development (仅当它确实包含源,类似于Feature_A2 / 3)
  4. 考虑在tags文件夹中“标记”你的版本(它几乎只是将trunk / branch文件夹复制到标签,但你有一个命令)。

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

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

在手动解决这些冲突/更改之前,SVN不允许您合并。

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

如果这对您有用,请告诉我!

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

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

即使TortoiseSVN Repo-browser允许您移动目录,很多元数据也会存储在每个目录中,并用于处理合并过程,因此您可能需要再次启动存储库。 有关如何设置存储库的更多详细信息,请参阅subversion最佳实践指南和存储库布局策略 。 总而言之,我会毫不犹豫地依赖Android Studio的svn集成来完成像分支合并一样繁重的工作(尽管JetBrains工具中的大多数东西都很棒)它对SVN的处理还有很多不足之处。