我们决定按照为我们添加到移动应用中的每个新功能创建新SVN分支的过程。这背后的最终目标是保留每个代码更改的历史记录(当我们手动将项目文件夹复制到SVN而不是创建和合并分支时,这不会发生。)
我的问题是到目前为止我无法将更改从一个分支合并到另一个分支。
我已经提到以下帖子但没有成功:
Android Studio Update Project: Merge vs Rebase vs Branch Default
How do merge specific svn revisions from branch to trunk in Android Studio 2.0
以下是我到目前为止所尝试的内容:
我有两个功能分支,如下面Tortoise SVN所示:
我想将分支 Feature_A3 中的更改合并到分支 Feature_A2 中。为此,我在A2工作副本中使用Android Studio&#VCS中的Merge from
选项:
然后它要求我选择要从(A3)合并的分支或配置其他分支:
我点击配置分支,只是为了显示现有的分支配置:
如您所见,A2是 Trunk ,A3是分支。 这是正确的吗?
然后它问我想要合并到A2的A3部分。我选择/src
目录(存在相关更改的位置):
然后慷慨地给了我三种不同的方式来执行合并操作:
我选择了第三个选项,因为它直接给了我需要合并的更改:
我点击合并选中和 BAM !!! 我每次都会收到此错误:
没有任何关于"未解决的冲突"或"跳过的项目"是。为什么我会收到此错误,如何将A3中的更改合并到A2中?有人可以帮忙吗?所有答案将不胜感激。谢谢......
我一直关注以下官方的Intellij IDEA文档:
请注意:
目前我使用的是Subversion,而不是Git。
我本地工作副本的目录结构并不完全正确 与SVN回购相同。这可能是错误的原因吗?
回答......
感谢Peter Parker,尤其是Yoav Aharoni,感谢他们的宝贵意见。正如Yoav正确指出的那样,确实是指定分支位置文件夹的方式。它需要是包含分支的文件夹,而不是分支文件夹本身:正如彼得正确地说的那样,检查"包括合并修订"显示合并的历史记录。我现在能够从IDE本身合并,并在TortoiseSVN中查看合并的历史记录。 没有命令行!的 YAY !!!
然而,最后一个问题是我无法按照Viewing Merge Sources中的描述在Android Studio(Intellij IDEA)中查看合并历史记录。有谁知道如何在Android Studio中实现这一目标?
答案 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中)。
所以,回顾一下:
Branch locations
设为http://192.168.0.64/svn/.../Android/Feature
Trunk
到http://192.168.0.64/svn/.../Android/Development
(仅当它确实包含来源,类似于Feature_A2 / 3)考虑"标记"你的版本在tags
文件夹中(它只是将trunk / branch文件夹复制到标签,但你有一个命令)。
如果您这样做,您还可以将tags
文件夹添加到Branch locations
,这样您就可以将当前来源与之前的任何版本进行比较(这很方便)。 / p>
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 guide和strategories for repository layout。总而言之,我会毫不犹豫地依赖Android Studio的svn集成来完成像分支合并一样繁重的工作(尽管JetBrains工具中的大多数东西都很棒)它对SVN的处理还有很多不足之处。