Android Studio - 无法从SVN分支

时间:2016-03-22 14:45:45

标签: android svn android-studio intellij-idea branching-and-merging

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

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

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

以下是我到目前为止所尝试的内容:

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

enter image description here

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

enter image description here

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

enter image description here

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

enter image description here

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

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

enter image description here

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

enter image description here

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

enter image description here

我点击合并选中 BAM !!! 我每次都会收到此错误:

enter image description here

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

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

请注意:

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

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

回答......

感谢Peter Parker,尤其是Yoav Aharoni,感谢他们的宝贵意见。正如Yoav正确指出的那样,确实是指定分支位置文件夹的方式。它需要是包含分支的文件夹,而不是分支文件夹本身:正如彼得正确地说的那样,检查"包括合并修订"显示合并的历史记录。我现在能够从IDE本身合并,并在TortoiseSVN中查看合并的历史记录。 没有命令行!的 YAY !!!

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

2 个答案:

答案 0 :(得分:7)

Phew,很久没有使用SVN了......:)

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

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

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

and so on...

trunk是主要开发的地方,branches用于功能,长期或风险项目,或用于不同阶段(如QA和pre-prod)。

因此,据我所知,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. 考虑"标记"你的版本在tags文件夹中(它只是将trunk / branch文件夹复制到标签,但你有一个命令)。

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

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

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

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


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

答案 1 :(得分:2)

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

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

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