Android Studio - 无法从SVN分支合并

17
我们决定为每个添加到我们的移动应用程序的新功能创建一个新的SVN分支的流程。这样做的终极目标是为了保留每个代码更改的历史记录(如果我们手动将项目文件夹复制到SVN而不是创建和合并分支,则无法实现此目标)。
我的问题是,到目前为止我无法将一个分支中的更改合并到另一个分支中。
我已经参考了以下帖子,但没有成功:
- 如何在Android Studio中使用SVN将分支与主干合并。 - Android Studio更新项目:合并vs Rebase vs Branch Default。 - 如何使用Android Studio将分支合并到SVN。 - 如何在Android Studio 2.0中从分支合并特定的SVN修订到主干
以下是我迄今为止尝试过的内容:
我有两个特性分支,如下所示在Tortoise SVN中:

enter image description here

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

enter image description here

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

enter image description here

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

enter image description here

如您所见,A2是主干,A3是分支这正确吗?

然后它会询问我想将A3的哪一部分合并到A2中。我选择/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所正确指出的那样,分支位置文件夹的指定方式确实有问题。它需要是包含分支的文件夹,而不是分支文件夹本身:正如Peter所说的那样,勾选“包含合并的修订版本”可以显示合并历史记录。现在我能够从IDE本身进行合并,并在TortoiseSVN中查看合并历史记录。没有命令行!太好了! 然而,最后一个问题是我无法像查看合并来源中描述的那样在Android Studio(Intellij IDEA)中查看合并历史记录。有人知道如何在Android Studio中实现吗?

2
你尝试过使用命令行或TortoiseSVN吗?错误信息可能会更具说明性,也许这个IDE缺少一些与svn相关的功能(这并不罕见)。 - Peter Parker
是的,它似乎可以与Tortoise SVN一起使用,但尽管更改已合并,但源分支的历史记录在合并后未反映在目标分支中,这本来就是目标...我如何合并更改并使源分支的历史记录反映在目标分支中? - Yash Sampat
1
你有在 TSVN 的对话框中勾选 "包含合并的修订版本" 吗? - Peter Parker
1
好的,让我试试看...顺便说一下,你可以把你的评论发布为答案...如果它有效,我会将其标记为正确答案并授予悬赏给你... :) - Yash Sampat
有多少人正在提交代码? - prog_24
显示剩余2条评论
2个回答

8

哦,好久没有用过SVN了... :)

但据我所记得的,分支位置应该是包含您的分支文件夹的文件夹(而不是每个单独的分支文件夹)。

您知道,通常情况下,SVN存储库遵循标准命名约定和文件夹结构:

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

and so on...
是主要开发的地方, 用于特性、长期或风险项目,或不同阶段(如 QA 和预生产)。

因此,就我所记得的,Android Studio 希望您将 设置为 文件夹。在您的情况下,我认为应该是 。

此外,您的 不是 - Feature_A2 只是另一个分支。
尽管我看不到内容,但我认为 可能是您的主干。

这不应该困扰您太多,因为您不必合并到主干,也可以在分支之间合并(例如将 Feature_A3 合并到 Feature_A2 中)。

因此,总结一下:

  1. 虽然不是强制性的,但我建议重命名文件夹以匹配约定(您可以通过在 Tortoise SVN 中右键单击轻松完成,但只有在所有队友提交后才能这样做,否则合并对他们来说将是一场噩梦)。
  2. 尝试将 设置为
  3. 如果确实包含源代码(类似于 Feature_A2/3),则将 设置为
  4. 考虑在 文件夹中“标记”您的发布(这基本上只是将主干/分支文件夹复制到标记中,但您有一个命令可以执行)。

    如果这样做,您还可以将 文件夹添加到 中,这样您就可以将当前源与任何以前的发布进行比较(非常方便)。

P.S:<"未解决的冲突"错误> 也可能意味着您有未解决的冲突(嘿 :))。当您和队友同时更改文件中的相同行时(或者如果他删除了您更改的文件),会创建冲突,并且您会更新以获取他的更改。

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

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


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


1
非常感谢您的绝对正确的答案!多亏了您,我现在能够从IDE中合并而不是从命令行中合并,这正是我想要的。确实是包含所有分支的文件夹... :) - Yash Sampat

2
我不是SVN专家,但我认为你需要更改目录结构。我相信即使这只是一个约定,svn也会使用目录结构来合并分支。因此,你的目录结构应该是:
SVN
   /Android
      /branches
         /production
         /featureA2
         /featureA3
      /tags 
      /trunk
  /IOS
      /branches
         /production
         /featureA2
         /featureA3
      /tags 
      /trunk

尽管TortoiseSVN Repo-browser允许您移动目录,但每个目录都存储了大量元数据,并用于处理合并过程,因此您可能需要重新开始设置您的仓库。有关如何设置您的仓库的更多详细信息,请参见Subversion最佳实践指南存储库布局的策略。尽管JetBrains工具中的大部分功能都非常出色,但我不会依赖Android Studio的svn集成来进行像合并分支这样的重型操作,因为它对SVN的处理还有很多需要改进的地方。

1
这是不正确的。SVN并不依赖于特定的目录结构。它从一个名为“mergeinfo”的属性中存储的元数据获取帮助,但即使没有这个属性,合并也可以正常工作。 - Peter Parker
@KrisErickson:感谢您抽出时间回答。我会进一步研究并回复您... :) - Yash Sampat

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接