16

我们已决定按照为我们添加到我们的移动应用程序的每个新功能创建新的SVN分支的过程。这背后的最终目标是为每个代码更改保留历史记录(当我们手动将项目文件夹复制到SVN而不是创建&合并分支时,不会发生这种情况。Android Studio - 无法从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是干线和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中的合并历史记录。 没有命令行! YAY !!!

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

+2

你用cmd-line或TortoiseSVN尝试过吗?有错误消息可能更能说明问题,也许这个IDE缺少一些svn相关功能(这并不罕见)。 –

+0

是的,它似乎与Tortoise SVN一起工作,但虽然这些更改已合并,但源合并后的历史记录并未反映在合并后的目标分支中,这是以...开始的目标...如何合并改变并将源分支的历史记录反映在目标分支中? –

+1

您是否在TSVNs对话框中选中了“包含合并修订”? –

回答

6

唷,没有使用SVN在一段时间... :)

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

你看,通常一个SVN回购遵循标准的命名规则和文件夹结构:

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. 虽然不是强制性的,我建议重新命名文件夹,以匹配约定(你可以很容易地通过右击做在乌龟SVN,但只有在所有队友的提交,否则合并对他们来说会是一个HELL)。
  2. 尝试设置Branch locationshttp://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也可能意味着你有未解决的冲突(死亡:))。当你和队友在文件中改变相同的行(或者如果他删除了你改变的文件)并且你更新以获得他的改变时,通常会创建冲突。

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

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


让我知道,如果你是这样的!

+1

非常感谢您的绝对正确答案!感谢你,我能够从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的处理方式还有很多不足之处。

+1

这是不正确的。 SVN不依赖于特定的目录结构。它从存储在名为“mergeinfo”的属性中的元数据中获得帮助,但是没有这个合并工作也是如此。 –

+0

@KrisErickson:谢谢你花时间回答。我会进一步调查并回复你... :) –