Android Studio - 无法从SVN分支合并

8 浏览
0 Comments

Android Studio - 无法从SVN分支合并

我们决定为我们添加到移动应用程序的每个新功能创建一个新的SVN分支的过程。这样做的最终目标是为每个代码更改保留历史记录(当我们手动将项目文件夹复制到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

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

enter image description here

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

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

enter image description here

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

enter image description here

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

enter image description here

我点击Merge Selected砰!每次都会出现这个错误:

enter image description here

对于"unresolved conflicts"或"skipped items",没有任何线索。为什么会出现这个错误,我应该怎么做才能将A3中的更改合并到A2中?请有人帮帮忙吗?所有答案将不胜感激。谢谢...

我一直在遵循以下官方Intellij IDEA文档:

请注意:

  • 目前我使用的是Subversion而不是Git。
  • 我的本地工作副本的目录结构与SVN存储库的目录结构不完全相同。这可能是错误的原因吗?

答案...

感谢Peter Parker和尤其是Yoav Aharoni的宝贵反馈意见。正如Yoav所指出的,确实是分支位置文件夹的指定方式有问题。它需要是包含分支的文件夹,而不是分支文件夹本身:正如Peter所说,勾选"Include merged revisions"可以显示合并的历史记录。现在我能够在IDE中进行合并,并在TortoiseSVN中查看合并的历史记录。

没有命令行!太棒了!

然而,最后一个问题是我无法在Android Studio(Intellij IDEA)中查看合并的历史记录,就像查看合并来源中所描述的那样。有人知道如何在Android Studio中实现这一点吗?

0
0 Comments

问题出现的原因是SVN对于分支合并依赖于目录结构,所以需要更改目录结构。解决方法是重新设置仓库的目录结构,将Android和IOS分别作为顶级目录,然后在每个顶级目录下创建branches、tags和trunk子目录,并在branches下创建不同的分支。需要注意的是,由于每个目录上存储了许多元数据用于处理合并过程,所以可能需要重新开始仓库。同时,建议不要过于依赖Android Studio的SVN集成工具来进行分支合并,因为其处理SVN的方式还有待改进。

SVN并不依赖于特定的目录结构,它可以通过名为"mergeinfo"的属性存储的元数据来辅助分支合并,但即使没有这些元数据,合并也可以正常工作。

感谢你花时间回答问题,我会进一步研究并与你联系。

0
0 Comments

问题原因:Android Studio期望设置“Branch locations”为“branches”文件夹,而不是每个单独的分支文件夹。

解决方法:

1. 建议按照规范重命名文件夹,可以在Tortoise SVN中右键单击轻松完成,但要在所有队友提交后才进行,否则合并对他们来说会很困难。

2. 尝试将“Branch locations”设置为“http://192.168.0.64/svn/.../Android/Feature”。

3. 如果确实包含源文件(类似Feature_A2/3),则将“Trunk”设置为“http://192.168.0.64/svn/.../Android/Development”。

4. 考虑在“tags”文件夹中对发布进行“标记”(实际上只是将trunk/branch文件夹复制到tags),可以使用命令完成此操作。如果这样做,还可以将“tags”文件夹添加到“Branch locations”,这样您就可以将当前源代码与任何先前的发布进行比较(非常方便)。

P.S: “unresolved conflicts”错误也可能意味着您有未解决的冲突。冲突通常在您和队友同时更改文件的相同行时创建(或者如果他删除了您更改的文件),并且您更新以获取他的更改。

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

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

如果这些方法对您有用,请告诉我!非常感谢您的正确答案!多亏了您,我可以从IDE而不是命令行进行合并,这正是我想要的。确实是包含所有分支的文件夹... 🙂

0