【问题标题】:Android Studio - unable to merge from SVN branchAndroid Studio - 无法从 SVN 分支合并
【发布时间】:2016-07-09 12:38:58
【问题描述】:

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

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

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

这是我目前尝试过的:

我有两个功能分支,如下图Tortoise SVN

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

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

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

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

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

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

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

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

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

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

请注意:

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

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

答案...

感谢Peter Parker,尤其是Yoav Aharoni 的宝贵反馈。正如 Yoav 正确指出的那样,这确实是指定分支位置文件夹的方式。它必须是包含分支的文件夹,而不是分支文件夹本身:正如彼得正确所说,选中“包含合并的修订”会显示合并的历史记录。我现在可以从 IDE 本身进行合并,并在 TortoiseSVN 中查看合并的历史记录。 没有命令行! 耶!!!

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

【问题讨论】:

  • 您尝试过使用 cmd-line 还是 TortoiseSVN?错误消息可能更能说明问题,也许这个 IDE 缺少一些与 svn 相关的功能(这并不少见)。
  • 是的,它似乎与 Tortoise SVN 一起工作,但是虽然合并了更改,但合并后来自源分支的历史并没有反映在目标分支中,这是开始的目标。 .. 如何合并更改并将源分支的历史记录反映在目标分支中?
  • 您是否在 TSVN 对话框中选中了“包含合并的修订版”?
  • 是的,让我试试...顺便说一句,您可以发布您的 cmets 作为答案...如果有效,我会将其标记为正确答案并将赏金奖励给您... :)
  • 有多少人在提交?

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


【解决方案1】:

呼,好久没用SVN了……:)

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

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

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 文件夹中“标记”您的版本(这几乎只是将主干/分支文件夹复制到标记中,但您有一个命令)。

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

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

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

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


让我知道这是否适合您!

【讨论】:

  • 非常感谢您的绝对正确答案!多亏了你,我能够从 IDE 而不是命令行进行合并,这正是我想要的。它确实是包含所有分支的文件夹...... :)
【解决方案2】:

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

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

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

【讨论】:

  • 这不是真的。 SVN 不依赖于特定的目录结构。它从存储在名为“mergeinfo”的属性中的元数据中获取帮助,但没有此属性也可以进行合并。
  • @KrisErickson:感谢您花时间回答。我会进一步调查并回复你... :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-11
  • 1970-01-01
  • 1970-01-01
  • 2018-11-08
  • 2013-07-20
  • 2011-05-16
相关资源
最近更新 更多